(MyBatis)动态代理Dao开发方法

相关文件:



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

<!-- 
 mapper接口代理实现编写规则:
 	1. 映射文件中namespace要等于接口的全路径
 	2. 映射文件中sql语句id要等于接口的方法名
 	3. 映射文件中传入参数类型要等于接口方法的传入参数类型
 	4. 映射文件中返回结果集类型要等于接口方法的返回值类型
 -->
<mapper namespace="com.jadan.mapper.UserMapper">

	<!-- 根据id查询用户 -->
	<select id="findUserById" parameterType="java.lang.Integer" resultType="com.jadan.po.User">
		select * from user where id = #{id}
	</select>
	
	<!-- 根据用户名模糊查询用户 -->
	<select id="findUserByUsername" parameterType="java.lang.String" resultType="com.jadan.po.User">
		select * from user where username like '%${value}%'
	</select>
	
	<!-- 插入用户 -->
	<insert id="insertUser" parameterType="com.jadan.po.User">
		<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
			select LAST_INSERT_ID()
		</selectKey>
		insert into user(username, sex, birthday, address)
		 value(#{username},#{sex},#{birthday},#{address})
	</insert>
	
	<!-- 更新用户信息 -->
	<update id="updateUserById" parameterType="com.jadan.po.User">
		update user set sex = #{sex} where id = #{id}
	</update>
	
	<!-- 删除用户信息 -->
	<delete id="delUserById" parameterType="java.lang.Integer">
		delete from user where id = #{id}
	</delete>
</mapper>


UserMapper.java 接口文件:

package com.jadan.mapper;

import java.util.List;
import com.jadan.po.User;

public interface UserMapper {

	// 根据id查询用户
	public User findUserById(Integer id);
	
	// 根据用户名模糊查询用户
	public List<User> findUserByUsername(String username);
	
	// 插入用户
	public void insertUser(User user);
	
	// 更新用户
	public void updateUserById(User user);
	
	// 删除用户
	public void delUserById(Integer id);
}

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/mybatis01?characterEncoding=utf-8"/>
				<property name="username" value="root"/>
				<property name="password" value="1234"/>
			</dataSource>
		</environment>
	</environments>
	
	<!-- 配置映射文件 -->
	<mappers>
		<!-- 
		  使用class属性引入接口的全路径名称:
		  使用规则:
		     1. 接口的名称和映射文件名称除扩展名外要完全相同
		     2. 接口和映射文件要放在同一个目录下
		 -->
		<mapper class="com.jadan.mapper.UserMapper"/>		
	</mappers>
</configuration>


UserMapperTest 测试文件:

package mybatis_day01;

import java.io.InputStream;
import java.util.Date;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import com.jadan.mapper.UserMapper;
import com.jadan.po.User;

public class UserMapperTest {
	
	private SqlSessionFactory factory;
	// 作用: 在测试方法前执行这个初始化方法
	@Before
	public void setUp() throws Exception {
		// 核心配置文件名
		String resource = "SqlMapConfig.xml";
		// 通过流将核心配置文件读取进来
		InputStream inputStream = Resources.getResourceAsStream(resource);
		// 通过核心配置文件输入流来创建会话工厂
		factory = new SqlSessionFactoryBuilder().build(inputStream);
	}
	
	// 测试: 通过id查用户
	@Test
	public void testFindUserById() {
		SqlSession openSession = factory.openSession();
		// 通过getMapper方法来实例化接口
		UserMapper mapper = openSession.getMapper(UserMapper.class);
		
		User user = mapper.findUserById(1);
		System.out.println(user);
	}
	
	// 测试: 通过用户名模糊查询用户
	@Test
	public void testFindUserByUsername() {
		SqlSession openSession = factory.openSession();
		// 通过getMapper方法来实例化接口
		UserMapper mapper = openSession.getMapper(UserMapper.class);
		
		List<User> list = mapper.findUserByUsername("王");
		System.out.println(list);
	}

	// 测试: 插入用户
	@Test
	public void testInsertUser() {
		SqlSession openSession = factory.openSession();
		// 通过getMapper方法来实例化接口
		UserMapper mapper = openSession.getMapper(UserMapper.class);
		
		User user = new User();
		user.setUsername("Jadan");
		user.setBirthday(new Date());
		user.setSex("男");
		user.setAddress("China");
		
		mapper.insertUser(user);
		
		// 提交事务
		openSession.commit();
	}
	
	// 测试: 更新
	@Test
	public void testUpdate() {
		SqlSession openSession = factory.openSession();
		// 通过getMapper方法来实例化接口
		UserMapper mapper = openSession.getMapper(UserMapper.class);
		
		User user = new User();
		user.setId(42);
		user.setSex("男");
		mapper.updateUserById(user);
		
		openSession.commit();
	}
	
	// 测试: 删除
	@Test
	public void testDelUserById() {
		SqlSession openSession = factory.openSession();
		// 通过getMapper方法来实例化接口
		UserMapper mapper = openSession.getMapper(UserMapper.class);
		
		mapper.delUserById(42);
		openSession.commit();
	}
}

下一篇:

猜你喜欢

转载自blog.csdn.net/jonez/article/details/81059682