mybatis学习笔记(二)之XML方式的基本用法

在前一篇笔记中,我们创建了配置 mybatis-config.xml 文件原来 mappers标签下的内容为:

<mappers>  
    <mapper resource="tk/mybatis/simple/mapper/CountryMapper.xml" /> 
</mappers> 

为了配置简单,我们采用配置包的形式添加mapper接口,修改为:

<mappers>  
    <package name="tk.mybatis.simple.mapper" /> 
</mappers>

该种方式会去扫描tk.mybatis.simple.mapper包下的所有接口


接下来开始我们的项目,项目的目录结构如下:

 


src/main/resources包的目录结构



接下来是代码部分内容,代码主要就是SysUser.java实体、UserMapper.Java接口、UserMapper.xml映射文件和UserMapperTest.Java测试代码四部分

扫描二维码关注公众号,回复: 4519784 查看本文章

SysUser.Java实体的代码

package tk.mybatis.simple.model;

public class SysUser {
	private Long id;
	private String userName;
	private String userPassword;
	private String userInfo;
	private byte[] headImg;
	private Date createTime;
	
	getter()、setter()方法
}

UserMapper.Java接口的代码:

package tk.mybatis.simple.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import tk.mybatis.simple.model.SysRole;
import tk.mybatis.simple.model.SysUser;

public interface UserMapper {

	/**
	 * 根据id查找用户
	 * @param id
	 * @return
	 */
	SysUser selectById(Long id);
	
	/**
	 * 查找所有用户
	 * @return
	 */
	List<SysUser> selectAll();
	
	/**
	 * 新增用户
	 * @param sysUser
	 * @return
	 */
	int insert(SysUser sysUser);
	
	/**
	 * 更新用户
	 * @param sysUser
	 * @return
	 */
	int update(SysUser sysUser);
	
	/**
	 * 根据id删除用户
	 * @param sysUser
	 * @return
	 */
	int delete(SysUser sysUser);
	
	/**
	 * 获取用户角色
	 * @param userId
	 * @param enabled
	 * @return
	 */
	List<SysRole> selectRolesByUserIdAndRoleEnabled(
			@Param("userId")Long userId, @Param("enabled")Integer enabled);
}

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 namespace="tk.mybatis.simple.mapper.UserMapper">

	<resultMap type="tk.mybatis.simple.model.SysUser" id="sysUserMap">
		<id property="id" column="id" />
		<result property="userName" column="user_name" />
		<result property="userPassword" column="user_password" />
		<result property="userInfo" column="user_info" />
		<result property="headImg" column="head_img" />
		<result property="createTime" column="create_time" jdbcType="TIMESTAMP" />
	</resultMap>
	
	<select id="selectById" resultMap="sysUserMap">
		select * from sys_user where id = #{id}
	</select>
		
	<select id="selectAll" resultMap="sysUserMap">
		select * from sys_user
	</select>
	
	<insert id="insert" useGeneratedKeys="true" keyProperty="id">
		insert into sys_user(user_name, user_password, user_info, head_img, create_time) 
		values(#{userName}, #{userPassword}, #{userInfo}, #{headImg, jdbcType=BLOB}, #{createTime, jdbcType=TIMESTAMP})
	</insert>
	
	<insert id="insert2">
		insert into sys_user(user_name, user_password, user_info, head_img, create_time) 
		values(#{userName}, #{userPassword}, #{userInfo}, #{headImg, jdbcType=BLOB}, #{createTime, jdbcType=TIMESTAMP})
		<selectKey keyColumn="id" keyProperty="id" resultType="long" order="AFTER">
			select last_insert_id()			
		</selectKey>
	</insert>
	
	<insert id="insert3">
		<selectKey keyColumn="id" keyProperty="id" resultType="long" order="BEFORE"> 
			select seq_id.nextval from dual
		</selectKey>
		insert into sys_user(id, user_name, user_password, user_info, head_img, create_time) 
		values(#{id}, #{userName}, #{userPassword}, #{userInfo}, #{headImg, jdbcType=BLOB}, #{createTime, jdbcType=TIMESTAMP})
	</insert>
	
	<update id="updateById">
		update sys_user
		set user_name = #{userName},
			user_password = #{userPassword},
			user_info = #{userInfo},
			head_img = #{headImg},
			create_time = #{createTime}
		where id = #{id}
	</update>
	
	<delete id="deleteById">
		delete from sys_user where id = #{id}
	</delete>
	
	<select id="selectRolesByUserIdAndRoleEnabled" resultType="SysRole">
		select r.id, r.role_name, r.enabled, r.create_by, r.create_time
		from sys_user u
		inner join sys_user_role ur on u.id = ur.user_id
		inner join sys_role r on ur.role_id = r.id
		where u.id = #{userId} and r.enabled = #{enabled}
	</select>
	
</mapper>

UserMapperTest.Java测试代码

package tk.mybatis.simple.mapper;

import java.util.Date;
import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.junit.Assert;
import org.junit.Test;

import tk.mybatis.simple.model.SysUser;

public class UserMapperTest extends BaseMapperTest{
	
	@Test
	public void testSelectById(){
		SqlSession sqlSession = this.getSqlSession();
		try{
			//SysUser sysUser = sqlSession.selectOne("tk.mybatis.simple.mapper.UserMapper.selectById", "1");
			//获取UserMapper接口
			UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
			SysUser sysUser = userMapper.selectById(1L);
			Assert.assertNotNull(sysUser);
			System.out.printf("%-4d%4s %4s\n", sysUser.getId(), sysUser.getUserName(), sysUser.getUserPassword());
		}finally{
			sqlSession.close();
		}
	}
	
	@Test
	public void testSelectAll(){
		SqlSession sqlSession = this.getSqlSession();
		
		try{
			//List<SysUser> userList = sqlSession.selectList("tk.mybatis.simple.mapper.UserMapper.selectAll");
			UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
			List<SysUser> userList = userMapper.selectAll();
			Assert.assertNotNull(userList);
			Assert.assertTrue(userList.size()>0);
			printUserList(userList);
		}finally{
			sqlSession.close();
		}
	}
	
	@Test
	public void testInsert(){
		SqlSession sqlSession = this.getSqlSession();
		try{
			UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
			SysUser user = new SysUser();
			//user.setUserName("test1");
			user.setUserPassword("123456");
			user.setHeadImg(new byte[]{1,2,3});
			user.setCreateTime(new Date());

			int result = userMapper.insert(user);
			Assert.assertEquals(1, result);
			//Assert.assertNull(user.getId());
		}finally{
			//默认的sqlSessionFactory.openSession()是不自动提交的
			sqlSession.rollback();
			sqlSession.close();
		}
		
	}
	
	
	private void printUserList(List<SysUser> userList) {
		for(SysUser sysUser : userList)
			System.out.printf("%-4d%4s %4s\n", sysUser.getId(), sysUser.getUserName(), sysUser.getUserPassword());
	}
}


以上内容纯属个人学习笔记,如果想详细学习mybatis,可前往http://mybatis.tk/下载相关工具及项目代码


猜你喜欢

转载自blog.csdn.net/weixin_37778823/article/details/79804953