Mybatis_CRUD基础

  1. 首先在DAO层定义Mapper接口和对应的xml文件,接口中声明具体需要的方法,xml文件中写首先方法的语句。
public interface UserMapper {
	//methods...
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <!-- namespace 映射文件的命名空间 写接口的全称  -->
<mapper namespace="com.test.dao.UserMapper">
	<!--与方法对应的SQL -->
</mapper>
  1. 方法和SQL的具体定义
    2.1新增
/**
* 新增 用户
 * @param user
 * @return
 */
int insertUser(User user);
<!-- 
 	新增操作
 		id - 对应接口中方法的名字
 		parameterType 参数类型
  -->
 <insert id="insertUser" parameterType="com.test.model.User">
 	insert into user
 		(username,password,sex) 
 	values
 		<!-- 
 			#{对应传入的对象的set方法后的字符串首字母变小写,严格区分大小写的}
 		 -->
 		(#{username},#{password},#{sex})
 </insert>

2.2 删除

/**
* 删除用户
 * @param userId
 * @return
 */
int delete(int userId);
 <!-- 删除 -->
 <delete id="delete" parameterType="int">
 	delete from user where user_id = #{userId}
 </delete>

2.3 修改

/**
 * 修改用户  
 * 
 * 方法有多个参数时 ,参数名字自动命名为
 * arg0 、arg1、...、 argn-1 例如:user->arg0 ,oldPassword->arg1
 * 或者
 * param1、param2、...、paramn 例如: user->param1, oldPassword->param2
 * 或者给参数前面添加@Param("自定义名字") 例如
 * int updatePassword(@Param("user") User user, @Param("oldPassword") String oldPassword);
 * 
 * @param user
 * @return
 */
int updatePassword(User user, String oldPassword);
 <!-- 修改密码 传入多个参数 -->
<update id="updatePassword" >
	update user set password = #{arg0.password} 
	where user_id = #{arg0.userId} and password = #{arg1}
</update>

2.4 查询

/**
 * 登录查询功能
 * @param username
 * @param password
 * @return 返回一个对象时,必须要保证 查询结果最多只有一条结果
 */
User login(@Param("username") String username, @Param("password") String password);

/**
 * 查询用户 返回多条记录的
 * @param map
 * @return
 */
List<User> select(Map<String, Object> map);
<!-- 
	查询语句一定要设置 resultType或者resultMap的属性  用来对结果集做映射的
	
		resultType 自动映射,会将查询结果的列 自动映射到java中对象的属性,
			需要对象类中有无参构造器或者相应的构造器
 -->
<select id="login" resultType="com.test.model.User">
	select
		user_id userid,
		username,
		password,
		sex
	from
		user
	where
		username = #{username}
	and
		password = #{password}
</select>

 <select id="select" parameterType="java.util.Map" resultType="com.test.model.User">
	select
		user_id userid,
		username,
		password,
		sex
	from
		user
	where
		<!-- 传入map参数时 ,参数名对应map的key -->
		username like concat('%',#{username},'%')
 </select>

  1. 创建一个工具类,静态加载mybatis配置文件并提供静态方法获得SqlSession对象和关闭SqlSession对象的方法
public class SqlSessionUtil {

	private static SqlSessionFactory factory;

	static {
		//1. 读取mybatis的配置文件
		Reader reader;
		try {
			reader = Resources.getResourceAsReader("mybatis-config.xml");
			//2. 获取SqlSessionFactory对象  通过构造器模式创建了工厂对象
			factory = new SqlSessionFactoryBuilder().build(reader);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 获取一个sql会话对象
	 * @return
	 */
	public static SqlSession openSession() {
		return factory.openSession();
	}

	/**
	 * 关闭sql会话对象
	 * @param sqlSession
	 */
	public static void close(SqlSession sqlSession) {
		if (sqlSession != null) {
			sqlSession.close();
		}
	}
}
  1. Service层调用
public class UserService {
	/**
	 * 新增用户
	 * @param user
	 */
	public void insertUser(User user) {
		SqlSession sqlSession = SqlSessionUtil.openSession();
		try {
			UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
			userMapper.insertUser(user);
			sqlSession.commit();
		} finally {
			SqlSessionUtil.close(sqlSession);
		}
	}
}
发布了340 篇原创文章 · 获赞 23 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/Chill_Lyn/article/details/103748541