MyBatis中dao的开发

目录

 

一.原始的dao开发

1.1 配置文件

1.2 新建个UserDao接口

1.3 新建个UserDaoImpl接口实现类

二.动态代理方式的dao开发

2.1 开发规则

2.2 开发步骤

2.3 测试动态代理开发


一.原始的dao开发

1.1 配置文件

①user.xml

<?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">

<mapper namespace="user">

	<!-- id:statementId
		 resultType:查询结果集的数据类型
		 parameterType:查询的入参
	-->
	<select id="getUserById" parameterType="int" resultType="mybatis.pojo.User" >
		<!-- #{}:点位符,相当于jdbc的? -->
		SELECT * FROM USER WHERE id = #{id1}
	</select>
	
	<!-- resultType:如果要返回数据集合,只需设定为每一个元素的数据类型 -->
	<select id="getUserByName" parameterType="string" resultType="mybatis.pojo.User">
		<!-- 
			方式一: SELECT * FROM USER WHERE username LIKE #{name}
			方式二: ${value}:字符串拼接指令,如果入参为普通数据类型{}内部只能写value,无需在代码中添加% %,如下 
		 -->
		SELECT * FROM USER WHERE username LIKE '%${value}%'
	</select>
	
	<!-- 方式一
		 useGeneratedKeys:标识插入使用自增id
		 keyProperty:与useGeneratedKeys配套使用,用于绑定主键接收的pojo属性
		 <insert id="insertUser" parameterType="mybatis.pojo.User" useGeneratedKeys="true" keyProperty="id">
	 -->
	<!-- 方式二 -->
	<insert id="insertUser" parameterType="mybatis.pojo.User">
		<!-- selectKey:用于配置主键返回
		 		 keyProperty:要绑定的pojo属性
		 		 resultType:属性数据类型
		 		 order:指定什么时候执行,AFTER之后
		 	-->
		<selectKey keyProperty="id" resultType="int" order="AFTER">
				 SELECT LAST_INSERT_ID()
		</selectKey>
		
			INSERT INTO USER
			            (`username`,
			             `birthday`,
			             `sex`,
			             `address`)
			VALUES (#{username},
			        #{birthday},
			        #{sex},
			        #{address});
	</insert>

	<update id="updateUser" parameterType="mybatis.pojo.User">
		UPDATE USER SET username = #{username} WHERE id = #{id}
	</update>
	
	<delete id="deleteUser" parameterType="int">
		DELETE FROM `user` WHERE `id` = #{id1}
	</delete>
	
</mapper>

②SqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<!-- 和spring整合后 environments配置将废除 -->
	<environments default="development">
		<environment id="development">
			<!-- 使用jdbc事务管理 -->
			<transactionManager type="JDBC" />
			<!-- 数据库连接池 -->
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url"
					value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
				<property name="username" value="root" />
				<property name="password" value="root" />
			</dataSource>
		</environment>
	</environments>
	<mappers>
		<mapper resource="mybatis/user.xml"/>
		<mapper resource="mybatis/UserMapper.xml"/>
	</mappers>
</configuration>

1.2 新建个UserDao接口

public interface UserDao {
	
	/**根据用户ID查询用户信息
	 * @param id
	 * @return
	 */
	User getUserById(Integer id);
	
	/**
	 * 根据用户名查找用户列表
	 * @param name
	 * @return
	 */
	List<User> getUserByUserName(String name);
	
	/**
	 * 添加用户
	 * @param user
	 */
	void insertUser(User user);
}

1.3 新建个UserDaoImpl接口实现类

public class UserDaoImpl implements UserDao {

	@Override
	public User getUserById(Integer id) {
		SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
		User user = sqlSession.selectOne("user.getUserById", id);
		sqlSession.close();
		return user;
	}

	@Override
	public List<User> getUserByUserName(String name) {
		SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
		List<User> list = sqlSession.selectList("user.getUserByName", name);
		sqlSession.close();
		return list;
	}

	@Override
	public void insertUser(User user) {
		SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
		sqlSession.insert("user.insertUser", user);
		sqlSession.commit();
		sqlSession.close();
	}

}

二.动态代理方式的dao开发

2.1 开发规则

  • namespace必需是接口的全路径名
  • 接口的方法名必需与映射文件的sql id一致
  • 接口的输入参数必需与映射文件的parameterType类型一致
  • 接口的返回类型必须与映射文件的resultType类型一致

2.2 开发步骤

  • 创建UserMapper.xml映射文件(把原来的user.xml复制按开发规则要求修改一下)
  • 创建UserMapper接口(把原来的UserDao.java复制按开发规则要求修改一下)
  • 加载UserMapper.xml
  • 该方法无需实现类

配置 UserMapper.xml

<?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必须是接口的全路径名;
		接口的方法名必须与sqlid 一致;
		接口的入参必须与	parameterType 类型一致
		接口的返回值必须与 resultType	类型一致
 -->
<mapper namespace="mybatis.mapper.UserMapper">

	<!-- id:statementId
		 resultType:查询结果集的数据类型
		 parameterType:查询的入参
	-->
	<select id="getUserById" parameterType="int" resultType="mybatis.pojo.User" >
		<!-- #{}:点位符,相当于jdbc的? -->
		SELECT * FROM USER WHERE id = #{id1}
	</select>
	
	<!-- resultType:如果要返回数据集合,只需设定为每一个元素的数据类型 -->
	<select id="getUserByUserName" parameterType="string" resultType="mybatis.pojo.User">
		<!-- 
			方式一: SELECT * FROM USER WHERE username LIKE #{name}
			方式二: ${value}:字符串拼接指令,如果入参为普通数据类型{}内部只能写value,无需在代码中添加% %,如下 
		 -->
		SELECT * FROM USER WHERE username LIKE '%${value}%'
	</select>
	
	<!-- 方式一
		 useGeneratedKeys:标识插入使用自增id
		 keyProperty:与useGeneratedKeys配套使用,用于绑定主键接收的pojo属性
		 <insert id="insertUser" parameterType="mybatis.pojo.User" useGeneratedKeys="true" keyProperty="id">
	 -->
	<!-- 方式二 -->
	<insert id="insertUser" parameterType="mybatis.pojo.User">
		<!-- selectKey:用于配置主键返回
		 		 keyProperty:要绑定的pojo属性
		 		 resultType:属性数据类型
		 		 order:指定什么时候执行,AFTER之后
		 	-->
		<selectKey keyProperty="id" resultType="int" order="AFTER">
				 SELECT LAST_INSERT_ID()
		</selectKey>
		
			INSERT INTO USER
			            (`username`,
			             `birthday`,
			             `sex`,
			             `address`)
			VALUES (#{username},
			        #{birthday},
			        #{sex},
			        #{address});
	</insert>

	
</mapper>

UserMapper接口

public interface UserMapper {
	
	/**根据用户ID查询用户信息
	 * @param id
	 * @return
	 */
	User getUserById(Integer id);
	
	/**
	 * 根据用户名查找用户列表
	 * @param name
	 * @return
	 */
	List<User> getUserByUserName(String name);
	
	/**
	 * 添加用户
	 * @param user
	 */
	void insertUser(User user);

}

2.3 测试动态代理开发

public class UserMapperTest {

	@Test
	public void testGetUserById() {
		// 加载配置得到SqlSession
		SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
		// 获取代理对象
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
		// 查询数据
		User user = userMapper.getUserById(30);
		System.out.println(user);
		// 关闭资源
		sqlSession.close();
	}

	@Test
	public void testGetUserByUserName() {
		SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
		// 获取代理对象
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
		// 查询数据
		List<User> list = userMapper.getUserByName("张");
		for (User user : list) {
			System.out.println(user);
		}
		// 关闭资源
		sqlSession.close();
	}

	@Test
	public void testInsertUser() {
		SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
		User user = new User();
		user.setUsername("张飞飞");
		user.setAddress("深圳市");
		user.setBirthday(new Date());
		user.setSex("1");
		userMapper.insertUser(user);
		// 提交事务
		sqlSession.commit();
		// 关闭资源
		sqlSession.close();
	}
}

猜你喜欢

转载自blog.csdn.net/qq_30162219/article/details/87522219