近些年来使用注解开发越来越流行,MyBatis顺应潮流,也可以使用注解开发。使用注解开发就可以不用写持久层映射配置文件了。这篇文章我们就来学习一下在MyBatis中如何使用注解进行CRUD。
@Insert:实现新增
@Update:实现更新
@Delete:实现删除
@Select:实现查询
@Result:实现结果集封装
@Results:可以与@Result一起使用,封装多个结果集
@ResultMap:实现引用@Results定义的封装
@One:实现一对一结果集封装
@Many:实现一对多结果集封装
注意:User类的属性名和数据库user表的列名不对应
package org.codeaction.domain;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
public class User implements Serializable {
private Integer userId;
private String userName;
private Date userBirthday;
private String userSex;
private String userAddress;
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public Date getUserBirthday() {
return userBirthday;
}
public void setUserBirthday(Date userBirthday) {
this.userBirthday = userBirthday;
}
public String getUserSex() {
return userSex;
}
public void setUserSex(String userSex) {
this.userSex = userSex;
}
public String getUserAddress() {
return userAddress;
}
public void setUserAddress(String userAddress) {
this.userAddress = userAddress;
}
@Override
public String toString() {
return "User{" +
"userId=" + userId +
", userName=‘" + userName + ‘\‘‘ +
", userBirthday=" + userBirthday +
", userSex=‘" + userSex + ‘\‘‘ +
", userAddress=‘" + userAddress + ‘\‘‘ +
‘}‘;
}
}
package org.codeaction.dao;
import org.apache.ibatis.annotations.*;
import org.codeaction.domain.User;
import java.util.List;
public interface IUserDao {
@Select("select * from user")
@Results(
id = "userMap",
value = {
@Result(id = true, column = "id", property = "userId"),
@Result(column = "username", property = "userName"),
@Result(column = "birthday", property = "userBirthday"),
@Result(column = "sex", property = "userSex"),
@Result(column = "address", property = "userAddress")
}
)
List<User> findAll();
@Select("select * from user where id=#{id}")
@ResultMap("userMap")
User findById(Integer id);
@Select("select * from user where username like #{name}")
@ResultMap("userMap")
List<User> findByName(String name);
@Select("select count(id) from user")
Integer findTotal();
@Insert("insert into user(username, birthday, sex, address) " +
"values(#{userName}, #{userBirthday}, #{userSex}, #{userAddress})")
@SelectKey(keyColumn = "id",
keyProperty = "userId",
resultType = Integer.class,
before = false,
statement = {"select last_insert_id()"})
Integer add(User user);
@Delete("delete from user where id=#{id}")
Integer del(Integer id);
@Update("update user set username=#{userName}, birthday=#{userBirthday}, " +
"sex=#{userSex}, address=#{userAddress} where id=#{userId}")
Integer update(User user);
}
<?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">
<!-- mybatis的主配置文件 -->
<configuration>
<properties resource="jdbcConfig.properties"></properties>
<!-- 配置环境 -->
<environments default="mysql">
<!-- 配置mysql的环境 -->
<environment id="mysql">
<!-- 配置事务的类型 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源连接池-->
<dataSource type="POOLED">
<!-- 配置连接数据库的4个基本信息 -->
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 -->
<mappers>
<!-- 也可以使用mapper标签的class属性 -->
<package name="org.codeaction.dao"/>
</mappers>
</configuration>
package org.codeaction.test;
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.codeaction.dao.IUserDao;
import org.codeaction.domain.User;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
public class MyBatisTest {
private InputStream in;
private SqlSession session;
@Before
public void init() throws IOException {
//读取配置文件
in = Resources.getResourceAsStream("SqlMapConfig.xml");
//创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
//使用工厂生产SqlSession对象
session = factory.openSession();
}
@After
public void destroy() throws IOException {
//提交事务
session.commit();
//释放资源
session.close();
in.close();
}
@Test
public void testFindAll() throws IOException {
//使用SqlSession创建Dao接口的代理对象
IUserDao userDao = session.getMapper(IUserDao.class);
//使用代理对象执行方法
List<User> list = userDao.findAll();
list.forEach(user -> {
System.out.println(user);
});
}
@Test
public void testFindById() {
IUserDao userDao = session.getMapper(IUserDao.class);
User user = userDao.findById(41);
System.out.println(user);
}
@Test
public void testAdd() {
User user = new User();
user.setUserName("小李");
user.setUserSex("男");
user.setUserAddress("CHN");
user.setUserBirthday(new Date());
IUserDao userDao = session.getMapper(IUserDao.class);
Integer result = userDao.add(user);
System.out.println(result);
}
@Test
public void testDel() {
IUserDao userDao = session.getMapper(IUserDao.class);
Integer result = userDao.del(60);
System.out.println(result);
}
@Test
public void testUpdate() {
User user = new User();
user.setUserId(59);
user.setUserName("小李");
user.setUserSex("女");
user.setUserAddress("CHN");
user.setUserBirthday(new Date());
IUserDao userDao = session.getMapper(IUserDao.class);
Integer result = userDao.update(user);
System.out.println(result);
}
@Test
public void testFindByName() {
IUserDao userDao = session.getMapper(IUserDao.class);
List<User> list = userDao.findByName("%王%");
list.forEach(System.out::println);
}
@Test
public void testFindTotal() {
IUserDao userDao = session.getMapper(IUserDao.class);
Integer total = userDao.findTotal();
System.out.println(total);
}
}
原文:https://www.cnblogs.com/codeaction/p/12925913.html