MyBatis3 开发环境搭建

1. 准备工作

  1. 下载并导入SQL数据文件:测试数据库脚本
  2. 下载相关JAR文件
    1. MyBatis3核心jar文件:mybatis-3.2.2.jar
    2. Mysql数据库驱动文件:mysql-connector-java-5.1.0-bin.jar

2. MyBatis3开发环境搭建

  1. 创建 JavaWeb 项目 MyBatisDemo
  2. 将相关JAR文件复制到WebRoot/WEB-INF/lib目录下
  3. 创建源码目录 resourcestest

3. 创建配置文件

  1. resources 目录下创建 mybatis-config.xml 文件
  2. mybatis-config.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><!-- 配置多套运行环境 default:默认执行的环境 --><environments default="dev"><!-- 配置运行环境 id:配置环境名称,不能重复 --><environment id="dev"><!-- 配置事务管理器 type:事务管理器类型 --><transactionManager type="JDBC"/><!-- 配置数据源 type:数据源类型 --><dataSource type="POOLED"><!-- 设置驱动 --><property name="driver" value="com.mysql.jdbc.Driver"/><!-- 设置连接字符串 --><property name="url" value="jdbc:mysql://127.0.0.1:3306/smbms?useUnicode=true&amp;characterEncoding=utf-8"/><!-- 用户名 --><property name="username" value="root"/><!-- 密码 --><property name="password" value="ok"/></dataSource></environment></environments>
</configuration>

4. 创建XML映射文件

  1. src 目录中创建包 dao.user
  2. dao.user 包中创建文件 UserMapper.xml
  3. 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="dao.user.UserMapper"><!-- 查询语句 id:唯一标识 resultType:返回值类型 --><select id="getCount" resultType="int">select count(1) as count from smbms_user</select>
</mapper>
  1. mybatis-config.xml 中配置 XML映射文件
<mappers><mapper resource="dao/user/UserMapper.xml"/>
</mappers>

5. 使用MyBatis3访问数据库

  1. test 目录中创建 单元测试文件 UserTest.java
  2. UserTest.java 中键入以下内容:
import java.io.IOException;
import java.io.InputStream;
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.Test;
public class UserMapperTest {@Testpublic void test() {int count = 0;SqlSession sqlSession = null;try {InputStream is = Resources.getResourceAsStream("mybatis-config.xml");SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);sqlSession = factory.openSession();count = sqlSession.selectOne("dao.user.UserMapper.getCount");System.out.println(count);} catch (IOException e) {e.printStackTrace();}finally{if (null != sqlSession) {sqlSession.close();}}}
}

MyBatis3 工具封装类

package util;import java.io.IOException;
import java.io.InputStream;import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;/*** MyBatis工具类* @author yacon**/
public class MyBatisUtil {// 声明SqlSessionFactory对象private static SqlSessionFactory factory = null;/*** 创建SqlSessionFactory对象*/static{try {InputStream is = Resources.getResourceAsStream("mybatis-config.xml");factory = new SqlSessionFactoryBuilder().build(is);} catch (IOException e) {e.printStackTrace();}}/*** 创建SqlSession对象* @return*/public static SqlSession createSqlSession(){return factory.openSession(false);}/*** 关闭SqlSession对象* @param sqlSession*/public static void closeSqlSession(SqlSession sqlSession){if(null != sqlSession){sqlSession.close();}}
}

MyBatis3 配置数据源

静态配置

将数据库信息直接写在环境中

<environments default="development"><environment id="development"><transactionManager type="JDBC"></transactionManager><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://127.0.0.1:3306/smbms?useUnicode=true&characterEncoding=utf-8"/><property name="username" value="root"/><property name="password" value="ok"/></dataSource></environment>
</environments>

动态配置

通过指定外部 properties 文件实现

  1. resources 目录下创建 database.properties 文件
  2. database.properties 文件中键入以下代码:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/smbms?useUnicode=true&characterEncoding=utf-8
username=root
password=ok
  1. 修改 mybatis-config.xml 文件,具体内容如下:
<properties resource="database.properties" />
<environments default="development"><environment id="development"><transactionManager type="JDBC"></transactionManager><dataSource type="POOLED"><property name="driver" value="${driver}" /><property name="url" value="${url}" /><property name="username" value="${username}" /><property name="password" value="${password}" /></dataSource></environment>
</environments>

在properties节点中配置

<properties><property name="driver" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://127.0.0.1:3306/smbms?useUnicode=true&characterEncoding=utf-8" /><property name="username" value="root" /><property name="password" value="ok" />
</properties>
<environments default="development"><environment id="development"><transactionManager type="JDBC"></transactionManager><dataSource type="POOLED"><property name="driver" value="${driver}" /><property name="url" value="${url}" /><property name="username" value="${username}" /><property name="password" value="${password}" /></dataSource></environment>
</environments>

混合模式实现

<properties resource="database.properties"><property name="driver" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://127.0.0.1:3306/smbms?useUnicode=true&characterEncoding=utf-8" /><property name="username" value="root" /><property name="password" value="ok" />
</properties>
<environments default="development"><environment id="development"><transactionManager type="JDBC"></transactionManager><dataSource type="POOLED"><property name="driver" value="${driver}" /><property name="url" value="${url}" /><property name="username" value="${username}" /><property name="password" value="${password}" /></dataSource></environment>
</environments>

MyBatis3 日志实现

准备工作

  1. 下载Log4j核心文件: log4j-1.2.17.jar
  2. 下载Log4j配置文件:log4j.properties

部署 Log4j

  1. log4j-1.2.17.jar 文件拷贝到 WebRoot/WEB-INF/lib 目录下
  2. log4j.properties 文件拷贝到 resources 目录下

配置 Log4j
打开mybatis-config.xml配置文件,并添加如下代码:

<settings><setting name="logImpl" value="LOG4J" />
</settings>

MyBatis3 通过接口进行数据库访问

1. 创建接口

  1. dao.user 包中,创建 UserMapper.java 接口文件
  2. UserMapper.java 文件中键入如下代码:
package dao.user;
public interface UserMapper {public int count();
}

2. 修改单元测试文件

package test.user;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import dao.user.UserMapper;
import utils.MybatisUtil;
public class UserTest {@Testpublic void getCount() {SqlSession session = null;try {session = MybatisUtil.openSession();int count = session.getMapper(UserMapper.class).getCount();System.out.println(count);} finally{MybatisUtil.closeSession(session);}}
}

MyBatis3 映射器的注册

直接注册映射器文件

<mappers><mapper resource="dao/user/UserMapper.xml" /><mapper resource="dao/role/RoleMapper.xml" />
</mappers>

通过包名自动注册

该方法会自动寻找并注册当前包及其子包中的映射器文件

<mappers><package name="dao"/>
</mappers>

MyBatis3 创建POJO类

什么是POJO类

POJO类即为持久化类,是指其实例状态需要被MyBatis持久化到数据库中的类。通常情况下,POJO类的类名与数据表名相同,属性名与字段名相同,但这不是必须的,因为MyBatis的映射机制可以解决POJO类中的属性名与数据表字段名不一致的问题。

创建POJO类

  1. src 目录中创建包 pojo
  2. pojo 包中创建 User.java 文件
  3. User.java 文件中键入如下代码:
package pojo;
import java.util.Date;
public class User {private Integer id;private String userCode;private String userName;private String userPassword;private Integer gender;private Date birthday;private String phone;private String address;private Integer userRole;private Integer createdBy;private Date creationDate;private Integer modifyBy;private Date modifyDate;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUserCode() {return userCode;}public void setUserCode(String userCode) {this.userCode = userCode;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getUserPassword() {return userPassword;}public void setUserPassword(String userPassword) {this.userPassword = userPassword;}public Integer getGender() {return gender;}public void setGender(Integer gender) {this.gender = gender;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public Integer getUserRole() {return userRole;}public void setUserRole(Integer userRole) {this.userRole = userRole;}public Integer getCreatedBy() {return createdBy;}public void setCreatedBy(Integer createdBy) {this.createdBy = createdBy;}public Date getCreationDate() {return creationDate;}public void setCreationDate(Date creationDate) {this.creationDate = creationDate;}public Integer getModifyBy() {return modifyBy;}public void setModifyBy(Integer modifyBy) {this.modifyBy = modifyBy;}public Date getModifyDate() {return modifyDate;}public void setModifyDate(Date modifyDate) {this.modifyDate = modifyDate;}
}

数据库类型与java类型对照表

数据库类型 java类型
int Integer
bigint Integer
varchar String
date java.util.Date
datetime java.util.Date

MyBatis3 向SQL语句传参

传入一个参数

  1. dao.user.UserMapper 接口中,新增如下方法:
public int del(int id);
  1. dao.user.UserMapper.xml 映射文件中添加如下代码:
<delete id="del" parameterType="int">
DELETE FROM smbms.smbms_user
WHERE
id = #{id}
</delete>
  1. 在单元测试文件 test.user.UserTest 类中添加如下方法:
@Test
public void del() {SqlSession session = null;try {session = MybatisUtil.openSession();int res = session.getMapper(UserMapper.class).del(17);if (res > 0) {session.commit();System.out.println("删除成功");} else {session.rollback();System.out.println("删除失败");}} finally {MybatisUtil.closeSession(session);}
}

传入多个参数

POJO对象实现

  1. dao.user.UserMapper 接口中,新增如下方法:
public int add(User user);
  1. dao.user.UserMapper.xml 映射文件中添加如下代码:
<insert id="add" parameterType="pojo.User">INSERT INTO smbms.smbms_user(userCode,userName,userPassword,gender,birthday,phone,address,userRole,createdBy,creationDate,modifyBy,modifyDate)VALUES(#{userCode},#{userName},#{userPassword},#{gender},#{birthday},#{phone},#{address},#{userRole},#{createdBy},#{creationDate},#{modifyBy},#{modifyDate});
</insert>
  1. 在单元测试文件 test.user.UserTest 类中添加如下方法:
@Testpublic void add() {SqlSession session = null;try {session = MybatisUtil.openSession();User user = new User();user.setUserCode("zhangsan");user.setUserName("张三");user.setUserPassword("123456");user.setGender(1);user.setBirthday(new SimpleDateFormat("yyyy-MM-dd").parse("1988-10-11"));user.setPhone("1895111111");user.setAddress("北京市长安路1号");user.setUserRole(1);user.setCreatedBy(1);user.setCreationDate(new SimpleDateFormat("yyy-MM-dd").parse("2019-4-1"));user.setModifyBy(1);user.setModifyDate(new SimpleDateFormat("yyy-MM-dd").parse("2019-5-1"));int res = session.getMapper(UserMapper.class).add(user);if (res > 0) {session.commit();System.out.println("插入成功");}else{session.rollback();System.out.println("插入失败");}} catch (ParseException e) {e.printStackTrace();} finally {MybatisUtil.closeSession(session);}
}

Map对象实现

  1. dao.user.UserMapper 接口中,新增如下方法:
public int login(Map<String, String> map);
  1. dao.user.UserMapper.xml 映射文件中添加如下代码:
<select id="login" parameterType="Map" resultType="int">SELECTCOUNT(1)FROMsmbms_userWHEREuserCode = #{userCode}AND userPassword = #{userPassword}
</select>
  1. 在单元测试文件 test.user.UserTest 类中添加如下方法:
@Test
public void login() {SqlSession session = null;try {session = MybatisUtil.openSession();Map<String, String> map = new HashMap<String, String>();map.put("userCode", "admin");map.put("userPassword", "1234567");int res = session.getMapper(UserMapper.class).login(map);if(res > 0){System.out.println("登陆成功");}else{System.out.println("登陆失败");}} finally {MybatisUtil.closeSession(session);}
}

注解实现

  1. dao.user.UserMapper 接口中,新增如下方法:
public int login2(@Param("userCode")String userCode, @Param("userPassword")String userPassword);
  1. dao.user.UserMapper.xml 映射文件中添加如下代码:
<select id="login2" resultType="int">SELECTCOUNT(1)FROMsmbms_userWHEREuserCode = #{userCode}AND userPassword = #{userPassword}
</select>
  1. 在单元测试文件 test.user.UserTest 类中添加如下方法:
@Test
public void login2() {SqlSession session = null;try {session = MybatisUtil.openSession();int res = session.getMapper(UserMapper.class).login2("admin","1234567");if(res > 0){System.out.println("登陆成功");}else{System.out.println("登陆失败");}} finally {MybatisUtil.closeSession(session);}
}

MyBatis3 类型别名

给具体的类取别名

<typeAliases><typeAlias type="pojo.User" alias="User"/><typeAlias type="pojo.Role" alias="Role"/>
</typeAliases>

给指定包下的类取别名

<typeAliases><package name="pojo"/>
</typeAliases>

MyBatis3 获取查询结果

单表查询

查询单个值

  1. dao.user.UserMapper 接口中,新增如下方法:
public String getUserName(@Param("userCode") String userCode);
  1. dao.user.UserMapper.xml 映射文件中添加如下代码:
<select id="getUserName" resultType="String">SELECTuserNameFROMsmbms_userWHEREuserCode = #{userCode}
</select>
  1. 在单元测试文件 test.user.UserTest 类中添加如下方法:
@Test
public void getUserName(){SqlSession session = null;try{session = MybatisUtil.openSession();String userName = session.getMapper(UserMapper.class).getUserName("admin");System.out.println(userName);} finally {MybatisUtil.closeSession(session);}
}

查询一行数据

  1. dao.user.UserMapper 接口中,新增如下方法:
public User getUserById(@Param("id") int id);
  1. dao.user.UserMapper.xml 映射文件中添加如下代码:
<select id="getUserById" resultType="pojo.User">SELECT*FROMsmbms_userWHEREid = #{id}
</select>
  1. 在单元测试文件 test.user.UserTest 类中添加如下方法:
@Test
public void getUserById(){SqlSession session = null;try{session = MybatisUtil.openSession();User user = session.getMapper(UserMapper.class).getUserById(1);System.out.println(user.getUserCode());System.out.println(user.getUserName());}finally {MybatisUtil.closeSession(session);}
}

查询多行数据

  1. dao.user.UserMapper 接口中,新增如下方法:
public List<User> getList();
  1. dao.user.UserMapper.xml 映射文件中添加如下代码:
<select id="getList" resultType="pojo.User">SELECT*FROMsmbms_user
</select>
  1. 在单元测试文件 test.user.UserTest 类中添加如下方法:
@Test
public void getList() {SqlSession session = null;try {session = MybatisUtil.openSession();List<User> users = session.getMapper(UserMapper.class).getList();for (User user : users) {System.out.println(user.getUserCode() + ":"+ user.getUserName());}} finally {MybatisUtil.closeSession(session);}
}

模糊查询

  1. dao.user.UserMapper 接口中,新增如下方法:
public List<User> getListByName(@Param("userName") String userName);
  1. dao.user.UserMapper.xml 映射文件中添加如下代码:
<select id="getListByName" resultType="pojo.User">SELECT*FROMsmbms_userWHEREuserName LIKE CONCAT('%',#{userName},'%')
</select>
  1. 在单元测试文件 test.user.UserTest 类中添加如下方法:
@Test
public void getListByName() {SqlSession session = null;try {session = MybatisUtil.openSession();List<User> users = session.getMapper(UserMapper.class).getListByName("孙");for (User user : users) {System.out.println(user.getUserCode() + ":"+ user.getUserName());}} finally {MybatisUtil.closeSession(session);}
}

分页查询

  1. dao.user.UserMapper 接口中,新增如下方法:
public List<User> getPage(@Param("currentPageNo")Integer currentPageNo,  @Param("pageSize")Integer pageSize);
  1. dao.user.UserMapper.xml 映射文件中添加如下代码:
<select id="getPage" resultType="User">SELECT*FROMsmbms_userLIMIT#{currentPageNo},#{pageSize}
</select>
  1. 在单元测试文件 test.user.UserTest 类中添加如下方法:
@Test
public void getPage(){SqlSession session = null;try {session = MybatisUtil.openSession();Integer currentPageNo = 2;Integer pageSize = 2;List<User> users = session.getMapper(UserMapper.class).getPage((currentPageNo - 1) * pageSize, pageSize);for (User user : users) {System.out.println(user.getUserCode() + ":" + user.getUserName());}} finally {MybatisUtil.closeSession(session);}
}

多表联合查询

主表引用附表字段

  1. pojo.User 类中,新增如下属性和方法:
private String roleName;
public String getRoleName() {return roleName;
}
public void setRoleName(String roleName) {this.roleName = roleName;
}
  1. dao.user.UserMapper 接口中,新增如下方法:
public List<User> getListJoinRole();
  1. dao.user.UserMapper.xml 映射文件中添加如下代码:
<select id="getListJoinRole" resultType="pojo.User">SELECTu.userCode,u.userName,r.roleNameFROMsmbms_user u,smbms_role rWHEREu.userRole = r.id
</select>
  1. 在单元测试文件 test.user.UserTest 类中添加如下方法:
@Test
public void getListJoinRole() {SqlSession session = null;try {session = MybatisUtil.openSession();List<User> users = session.getMapper(UserMapper.class).getListJoinRole();for (User user : users) {System.out.println(user.getUserCode() + ":"+ user.getUserName() + ":" + user.getRoleName());}} finally {MybatisUtil.closeSession(session);}
}

主表引用附表POJO对象

  1. pojo 包中创建 role 表的映射类 Role
package pojo;
import java.util.Date;
public class Role {private Integer id;private String roleCode;private String roleName;private Integer createdBy;private Date createDate;private Integer modifyBy;private Date modifyDate;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getRoleCode() {return roleCode;}public void setRoleCode(String roleCode) {this.roleCode = roleCode;}public String getRoleName() {return roleName;}public void setRoleName(String roleName) {this.roleName = roleName;}public Integer getCreatedBy() {return createdBy;}public void setCreatedBy(Integer createdBy) {this.createdBy = createdBy;}public Date getCreateDate() {return createDate;}public void setCreateDate(Date createDate) {this.createDate = createDate;}public Integer getModifyBy() {return modifyBy;}public void setModifyBy(Integer modifyBy) {this.modifyBy = modifyBy;}public Date getModifyDate() {return modifyDate;}public void setModifyDate(Date modifyDate) {this.modifyDate = modifyDate;}
}
  1. pojo.User 类中,新增如下属性和方法:
private Role role;
public Role getRole() {return role;
}
public void setRole(Role role) {this.role = role;
}
  1. dao.user.UserMapper 接口中,新增如下方法:
public List<User> getListJoinRole();
  1. dao.user.UserMapper.xml 映射文件中添加如下代码:
<select id="getListJoinRole" resultMap="getListJoinRoleResultMap">SELECTu.userCode,u.userName,r.roleNameFROMsmbms_user u,smbms_role rWHEREu.userRole = r.id
</select>
<resultMap type="pojo.User" id="getListJoinRoleResultMap"><result column="userCode" property="userCode" /><result column="userName" property="userName" /><association property="role" javaType="pojo.Role"><result column="roleName" property="roleName" /></association>
</resultMap>
  1. 在单元测试文件 test.user.UserTest 类中添加如下方法:
@Test
public void getListJoinRole() {SqlSession session = null;try {session = MybatisUtil.openSession();List<User> users = session.getMapper(UserMapper.class).getListJoinRole();for (User user : users) {System.out.println(user.getUserCode() + ":"+ user.getUserName() + ":" + user.getRoleName());}} finally {MybatisUtil.closeSession(session);}
}

主表引用附表POJO对象集合

  1. pojo 包中创建 address 表的映射类 Address
package pojo;
import java.util.Date;
public class Address {private Integer id;private String contact;private String addressDesc;private String postCode;private String tel;private Integer createdBy;private Date createdDate;private Integer modifyBy;private Date modifyDate;private Integer userId;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getContact() {return contact;}public void setContact(String contact) {this.contact = contact;}public String getAddressDesc() {return addressDesc;}public void setAddressDesc(String addressDesc) {this.addressDesc = addressDesc;}public String getPostCode() {return postCode;}public void setPostCode(String postCode) {this.postCode = postCode;}public String getTel() {return tel;}public void setTel(String tel) {this.tel = tel;}public Integer getCreatedBy() {return createdBy;}public void setCreatedBy(Integer createdBy) {this.createdBy = createdBy;}public Date getCreatedDate() {return createdDate;}public void setCreatedDate(Date createdDate) {this.createdDate = createdDate;}public Integer getModifyBy() {return modifyBy;}public void setModifyBy(Integer modifyBy) {this.modifyBy = modifyBy;}public Date getModifyDate() {return modifyDate;}public void setModifyDate(Date modifyDate) {this.modifyDate = modifyDate;}public Integer getUserId() {return userId;}public void setUserId(Integer userId) {this.userId = userId;}
}
  1. pojo.User 类中,新增如下属性和方法:
private List<Address> addresses;
public List<Address> getAddresses() {return addresses;
}
public void setAddresses(List<Address> addresses) {this.addresses = addresses;
}
  1. dao.user.UserMapper 接口中,新增如下方法:
public User getUserAddress(@Param("id") int id);
  1. dao.user.UserMapper.xml 映射文件中添加如下代码:
<select id="getUserAddress" resultMap="getUserAddressMap">SELECTa.contact, a.addressDesc, u.userNameFROMsmbms_address a, smbms_user uWHEREa.userId = u.id ANDuserId = 1
</select>
<resultMap type="pojo.User" id="getUserAddressMap"><result column="userName" property="userName"/><collection property="addresses" ofType="pojo.Address"><result column="contact" property="contact"/><result column="addressDesc" property="addressDesc"/></collection>
</resultMap>
  1. 在单元测试文件 test.user.UserTest 类中添加如下方法:
@Test
public void getUserAddress() {SqlSession session = null;try {session = MybatisUtil.openSession();User user = session.getMapper(UserMapper.class).getUserAddress(1);System.out.println(user.getUserName());for (Address address : user.getAddresses()) {System.out.println(address.getContact() + ":" + address.getAddressDesc());}} finally {MybatisUtil.closeSession(session);}
}

MyBatis3 结果集映射机制

POJO类属性名与数据表字段名不一致的情况

  1. pojo 包下创建类 pojo.Role2,并键入如下代码:
package pojo;
import java.util.Date;
public class Role2 {private Integer id;private String roleCode;private String name; // 表字段 roleNameprivate Integer createdBy;private Date creationDate;private Integer modifyBy;private Date modifyDate;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getRoleCode() {return roleCode;}public void setRoleCode(String roleCode) {this.roleCode = roleCode;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getCreatedBy() {return createdBy;}public void setCreatedBy(Integer createdBy) {this.createdBy = createdBy;}public Date getCreationDate() {return creationDate;}public void setCreationDate(Date creationDate) {this.creationDate = creationDate;}public Integer getModifyBy() {return modifyBy;}public void setModifyBy(Integer modifyBy) {this.modifyBy = modifyBy;}public Date getModifyDate() {return modifyDate;}public void setModifyDate(Date modifyDate) {this.modifyDate = modifyDate;}
}
  1. src 目录下创建包 dao.role
  2. 在包 dao.role 下创建 RoleMapper.java 接口,并键入如下代码:
package dao.role;
import java.util.List;
import pojo.Role2;
public interface RoleMapper {public List<Role2> getRoleList();
}
  1. 在包 dao.role 下创建 RoleMapper.xml 映射文件,并键入如下代码:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="dao.role.RoleMapper"><select id="getRole" resultMap="getRoleMap">SELECT * FROM smbms_role</select><resultMap type="pojo.Role2" id="getRoleMap"><result property="id" column="id" /><result property="roleCode" column="roleCode" /><result property="name" column="roleName" /><result property="createdBy" column="createdBy" /><result property="creationDate" column="creationDate" /><result property="modifyBy" column="modifyBy" /><result property="modifyDate" column="modifyDate" /></resultMap>
</mapper>
  1. test 目录下创建包 test.role
  2. test.role 目录下创建单元测试类 RoleTest.java,并键入如下代码:
package smbms.role.test;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import pojo.Role2;
import dao.role.RoleMapper;
import utils.MybatisUtil;
public class RoleTest {@Testpublic void getRoleListTest() {SqlSession session = null;try {session = MybatisUtil.openSession();List<Role2> roleList = session.getMapper(RoleMapper.class).getRoleList();for (Role2 role2 : roleList) {}} finally {MybatisUtil.closeSession(session);}}
}

自动映射行为

当字段名和属性名部分相同时,可以通过 autoMappingBehavior 配置项类指定是否需要自动映射

取消自动映射

NONE 表示取消自动映射

<settings><setting name="autoMappingBehavior" value="NONE"/>
</settings>

完全自动映射

FULL 会自动映射任意复杂的结果集(无论是否嵌套)

<settings><setting name="autoMappingBehavior" value="FULL"/>
</settings>

部分自动映射

PARTIAL 只会自动映射没有定义嵌套结果集映射的结果集

<settings><setting name="autoMappingBehavior" value="PARTIAL"/>
</settings>

MyBatis3 动态SQL映射

if

接口

public List<User> getUserList(@Param("rid")Integer rid);

映射

<select id="getUserList" resultType="user">SELECT * FROM smbms_user<if test="rid != null">WHERE userRole=#{rid}</if>
</select>

测试

List<User> users = session.getMapper(UserMapper.class).getUserList(2);
List<User> users = session.getMapper(UserMapper.class).getUserList(null);

where-if / trim-if

接口

public List<User> getUserList(@Param("rid")Integer rid, @Param("name")String name);

映射

<select id="getUserList" resultType="User">SELECT * FROM smbms_user<where><if test="name != null and name != ''">AND userName LIKE CONCAT('%',#{name},'%')</if><if test="rid != null">AND userRole = #{rid}</if></where>
</select>
<!-- 或 -->
<select id="getUserList" resultType="User">SELECT * FROM smbms_user<trim prefix="where" prefixOverrides="and|or"><if test="name != null and name != ''">AND userName LIKE CONCAT('%',#{name},'%')</if><if test="rid != null">AND userRole = #{rid}</if></trim>
</select>

测试

List<User> users1 = sqlSession.getMapper(UserMapper.class).getUserList(null, null);
List<User> users2 = sqlSession.getMapper(UserMapper.class).getUserList(null, 3);
List<User> users3 = sqlSession.getMapper(UserMapper.class).getUserList("孙", null);
List<User> users4 = sqlSession.getMapper(UserMapper.class).getUserList("孙", 3);

foreach

接口

public List<User> getUserListInId(@Param("rids")Integer[] rids);

映射

<select id="getUserListInId" resultType="pojo.User">SELECT * FROM smbms_user WHERE id in<foreach collection="rids" item="rid" open="(" separator="," close=")">#{rid}</foreach>
</select>

测试

Integer[] rids = {1,3,5};
List<User> users = sqlSession.getMapper(UserMapper.class).getUserListInId(rids);

choose-when-otherwise

接口

public List<User> getUserList(@Param("rid")Integer rid, @Param("name")String name);

映射

<select id="getUserList" resultType="user">SELECT * FROM smbms_user<choose><when test="rid != null">WHERE userRole = #{rid}</when><when test="name != null">WHERE userName LIKE CONCAT('%',#{name}, '%')</when></choose>
</select>

测试

session.getMapper(UserMapper.class).getUserList(2,"孙");
session.getMapper(UserMapper.class).getUserList(null,"孙");

set-if / trim-if

接口

public Integer setUser(User user);

映射

<update id="setUser">UPDATE smbms.smbms_user<set><if test="userCode != null">userCode = #{userCode} , </if><if test="userName != null">userName = #{userName}, </if><if test="userPassword != null">userPassword = #{userPassword} ,</if><if test="gender != null">gender = #{gender} , </if><if test="birthday != null">birthday = #{birthday} , </if><if test="phone != null">phone = #{phone} , </if><if test="address != null">address = #{address} , </if><if test="userRole != null">userRole = #{userRole} ,</if><if test="createdBy != null">createdBy = #{createdBy} , </if><if test="creationDate != null">creationDate = #{creationDate} , </if><if test="modifyBy != null">modifyBy = #{modifyBy} , </if><if test="modifyDate != null">modifyDate = #{modifyDate} , </if></set>WHERE id = #{id}
</update>
<!-- 或 -->
<update id="saveUser">UPDATE smbms_user<trim prefix="set" suffixOverrides="," suffix="WHERE id=#{id}"><if test="userCode != null">userCode = #{userCode} , </if><if test="userName != null">userName = #{userName}, </if><if test="userPassword != null">userPassword = #{userPassword} ,</if><if test="gender != null">gender = #{gender} , </if><if test="birthday != null">birthday = #{birthday} , </if><if test="phone != null">phone = #{phone} , </if><if test="address != null">address = #{address} , </if><if test="userRole != null">userRole = #{userRole} ,</if><if test="createdBy != null">createdBy = #{createdBy} , </if><if test="creationDate != null">creationDate = #{creationDate} , </if><if test="modifyBy != null">modifyBy = #{modifyBy} , </if><if test="modifyDate != null">modifyDate = #{modifyDate} , </if></trim>
</update>

测试

User user = new User();
user.setId(1);
user.setUserCode("admin1");
user.setUserName("管理员");
session.getMapper(UserMapper.class).setUser(user);

MyBatis3 开发环境搭建相关推荐

  1. Android环境搭建和Android HelloWorld—Android开发环境搭建

    Android_Android开发环境搭建-搭建Android的开发环境 1.我考虑先下载JDK7.0,在JDK的安装中,考虑一般SDK都是向上兼容的,于是选择了最高的版本7.0 这里是我总结的详细的 ...

  2. qt工程在linux系统里颜色显示错误_【飞凌嵌入式RK3399开发板试用体验】+QT开发环境搭建测试(二)...

    作者:飞扬的青春 在拿到开发板之后,已经体验了Android操作系统,接下来就是体验Linux下的开发,本次以QT的一个小案例来测试下. 首先是自己先搭建了一个Ubuntu18.04的虚拟机,使用真机 ...

  3. Go:分布式学习利器(1) -- 开发环境搭建 + 运行第一个go程序

    文章目录 为什么要学习 go 开发环境搭建 -- MAC 运行第一个go程序 go 函数的返回值设置 go 函数的命令行参数 为什么要学习 go 在如下几个应用场景的需求下产生了go: 超大规模分布式 ...

  4. 智能合约开发环境搭建及Hello World合约

    如果你对于以太坊智能合约开发还没有概念(本文会假设你已经知道这些概念),建议先阅读入门篇. 就先学习任何编程语言一样,入门的第一个程序都是Hello World.今天我们来一步一步从搭建以太坊智能合约 ...

  5. iPhone开发环境搭建全过程 iPhone手机开发内容,中文手册

    http://3g.edu.csdn.net/kecheng/iphone.html  iPhone手机开发内容 http://www.docin.com/p-34874880.html# iPhon ...

  6. python搭建numpy_python开发环境搭建及numpy基本属性-【老鱼学numpy】

    目的 本节我们将介绍如何搭建python的开发环境以及numpy的基本属性,这样可以检验我们的numpy是否安装正确了. python开发环境的搭建 工欲善其事必先利其器,我用得比较顺手的是Intel ...

  7. windows下pomelo开发环境搭建及JS乱码问题

    from: http://blog.csdn.net/wangqiuyun/article/details/9243263 最近一直在研究node.js这一块,为的就是使用网易的pomelo框架,学习 ...

  8. Android配置----Android开发环境搭建

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

  9. JDK安装以及开发环境搭建

    无论是Java开发.J2EE以及Android开发搭建环境时JDK开发环境搭建及环境变量配置是必不可少的,这篇文章就来就分别介绍下JDK的下载以及不同平台的环境变量的配置. 1.安装JDK开发环境 官 ...

最新文章

  1. marquee 滚动字幕
  2. laravel ajax login,设置在ajax上记住laravel登录
  3. 把《c++ primer》读薄(4-2 c和c++的数组 和 指针初探)
  4. 【opencv+机器学习】error C3083: 'ml': the symbol to the left of a '::' must be a type问题原因
  5. Servlet 与 Ajax 交互一直报status=parsererror
  6. Java并发编程笔记之ConcurrentLinkedQueue源码探究
  7. 一行语句让你的浏览器变成记事本
  8. 微软发布Windows 11 PC上也能运行手机应用
  9. 基于Arweave的文件同步应用ArDrive完成160万美元融资
  10. 我求求你了,GC日志打印别再瞎配置了
  11. win7设置固定IP重启后无法上网,ipconfig显示为自动配置IPV4 169.254的地址
  12. Java学习笔记2——java的安装和配置
  13. 合并两个有序链表(Java)
  14. 基于自适应参数及小生境的改进鲸鱼优化算法
  15. 1.1 计算机语言发展史以及未来方向
  16. ruby自动注册163邮箱
  17. android开发教程21篇(强烈推荐,几乎每一篇都是精华教程)
  18. [概念]医学图像分割中常用的Loss function(损失函数) + 从loss处理图像分割中类别极度不均衡
  19. ecshop smarty php,ecshop的smarty基础普及知识
  20. 什么是卫片?什么是卫片执法?一文了解卫片执法基础知识

热门文章

  1. GCC编译器优化选项分析及具体优化了什么
  2. Linux 安装指定版本GCC方法
  3. 用awk下载优酷视频
  4. 揭秘跑男全部游戏规则及说明
  5. Android 自定义控件玩转字体变色 打造炫酷ViewPager指示器
  6. android App应用实现评分功能
  7. Unity 双指旋转
  8. window.localStorage.setItem的理解与使用
  9. 使用 LoRA 技术对 LLaMA 65B 大模型进行微调及推理
  10. 点击按钮,回到页面顶部的5种写法