Mybatis常用注解
@Insert:实现新增
@Update:实现更新
@Delete:实现删除
@Select:实现查询
@Result:实现结果集封装
@Results:可以与@Result 一起使用,封装多个结果集
@One:实现一对一结果集封装
@Many:实现一对多结果集封装
MyBatisz注解的增删改查
即无需再写(UserMapper.xml)配置文件
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>
<!--加载外部properties-->
<properties resource="jdbc.properties"></properties>
<!--配置数据源环境-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<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>
<mappers>
<!--扫描使用注解的类-->
<mapper class="li.chen.com.business.mapper.UserMapper"></mapper>
</mappers>
<!-- <mappers>-->
<!-- <!–扫描使用注解的类所在的包–>-->
<!-- <package name="li.chen.com.business.mapper"></package>-->
<!-- </mappers>-->
</configuration>
UserMapper
package li.chen.com.business.mapper;
import li.chen.com.business.entity.User;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import java.util.List;
public interface UserMapper {
@Insert("insert into user(id,userName,passWord) values (#{id},#{userName},#{passWord})")
public void insert(User user);
@Update("update user set userName=#{userName},passWord=#{passWord} where id=#{id}")
public void update(User user);
@Select("select * from user where id = #{id}")
public User findById(int id);
@Delete("delete from user where id=#{id}")
public void delete(int id);
@Select("select * from user")
public List<User> findAll();
}
测试类
package li.chen.com;
import li.chen.com.business.entity.User;
import li.chen.com.business.mapper.UserMapper;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class MybatisTest {
private UserMapper mapper;
@Before
public void before() throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession(true);
mapper = sqlSession.getMapper(UserMapper.class);
}
@Test
public void testInsert(){
User user = new User();
user.setUserName("anan");
user.setPassWord("98584785");
mapper.insert(user);
}
@Test
public void testiUpdate(){
User user = new User();
user.setUserName("anny");
user.setPassWord("000000");
user.setId(2);
mapper.update(user);
}
@Test
public void testFindById(){
User byId = mapper.findById(2);
System.out.println(byId);
}
@Test
public void testDelete(){
mapper.delete(2);
}
@Test
public void testFindAll(){
List<User> userList = mapper.findAll();
for (User user : userList) {
System.out.println(user);
}
}
}
MyBatisz注解的一对一实现
Orders
package li.chen.com.business.entity;
import java.util.Date;
public class Orders {
private Integer id;
private Date orderTime;
private Double total;
private Integer uid;
//当前订单属于哪个用户 即数据库中uid
private User user;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Date getOrderTime() {
return orderTime;
}
public void setOrderTime(Date orderTime) {
this.orderTime = orderTime;
}
public Double getTotal() {
return total;
}
public void setTotal(Double total) {
this.total = total;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
@Override
public String toString() {
return "Orders{" +
"id=" + id +
", orderTime=" + orderTime +
", total=" + total +
", uid=" + uid +
", user=" + user +
'}';
}
}
OrdersMapper (重点)
package li.chen.com.business.mapper;
import li.chen.com.business.entity.Orders;
import li.chen.com.business.entity.User;
import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface OrdersMapper {
@Select("select * from orders")
@Results({
@Result(column = "oid" , property = "id"),
@Result(column = "orderTime" , property = "orderTime"),
@Result(column = "total" , property = "total"),
@Result(
property = "user", //要封装的属性名称
column = "uid", //根据这个字段去查询user表的数据
javaType = User.class, // 要封装的实体类
//select 属性 代表查询那接口的方法获得数据
one = @One(select = "li.chen.com.business.mapper.UserMapper.findById")
)
})
public List<Orders> findAll();
/*
@Select("select *,o.id oid from orders o,user u where o.uid=u.id")
@Results({
@Result(column = "oid" , property = "id"),
@Result(column = "orderTime" , property = "orderTime"),
@Result(column = "total" , property = "total"),
@Result(column = "uid" , property = "user.id"),
@Result(column = "userName" , property = "user.userName"),
@Result(column = "passWord" , property = "user.passWord"),
@Result(column = "birthday" , property = "user.birthday")
})
public List<Orders> findAll();
*/
}
测试类
package li.chen.com;
import li.chen.com.business.entity.Orders;
import li.chen.com.business.entity.User;
import li.chen.com.business.mapper.OrdersMapper;
import li.chen.com.business.mapper.UserMapper;
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 java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
public class MybatisTest2 {
private OrdersMapper mapper;
@Before
public void before() throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession(true);
mapper = sqlSession.getMapper(OrdersMapper.class);
}
@Test
public void testFindAll(){
List<Orders> ordersList = mapper.findAll();
for (Orders orders : ordersList) {
System.out.println(orders);
}
}
}
//---------------------------------------------------------
18:36:43,063 DEBUG findAll:159 - ==> Preparing: select * from orders
18:36:43,093 DEBUG findAll:159 - ==> Parameters:
18:36:43,121 DEBUG findById:159 - ====> Preparing: select * from user where id = ?
18:36:43,122 DEBUG findById:159 - ====> Parameters: 1(Integer)
18:36:43,126 DEBUG findById:159 - <==== Total: 1
18:36:43,129 DEBUG findById:159 - ====> Preparing: select * from user where id = ?
18:36:43,129 DEBUG findById:159 - ====> Parameters: 2(Integer)
18:36:43,131 DEBUG findById:159 - <==== Total: 1
18:36:43,131 DEBUG findAll:159 - <== Total: 3
Orders{id=null, orderTime=Wed Dec 12 00:00:00 CST 2018, total=3000.0, uid=null, user=User{id=1, userName='lucy', passWord='123', birthday=Wed Dec 12 00:00:00 CST 2018, roleList=null}}
Orders{id=null, orderTime=Wed Dec 12 00:00:00 CST 2018, total=4000.0, uid=null, user=User{id=1, userName='lucy', passWord='123', birthday=Wed Dec 12 00:00:00 CST 2018, roleList=null}}
Orders{id=null, orderTime=Wed Dec 12 00:00:00 CST 2018, total=5000.0, uid=null, user=User{id=2, userName='haohao', passWord='123', birthday=Thu Dec 12 00:00:00 CST 2019, roleList=null}}
MyBatisz注解的一对多的实现
UserMapper
package li.chen.com.business.mapper;
import li.chen.com.business.entity.Orders;
import li.chen.com.business.entity.User;
import org.apache.ibatis.annotations.*;
import java.util.List;
public interface UserMapper {
@Insert("insert into user(id,userName,passWord,birthday) values (#{id},#{userName},#{passWord},#{birthday})")
public void insert(User user);
@Update("update user set userName=#{userName},passWord=#{passWord} where id=#{id}")
public void update(User user);
@Select("select * from user where id = #{id}")
public User findById(int id);
@Delete("delete from user where id=#{id}")
public void delete(int id);
@Select("select * from user")
public List<User> findAll();
@Select("select * from user")
@Results({
@Result(id = true, column = "id", property = "id"),
@Result(column = "userName", property = "userName"),
@Result(column = "passWord", property = "passWord"),
@Result(column = "birthday", property = "birthday"),
@Result(
property = "ordersList",
column = "id",
javaType = List.class, //查询结果为list
many = @Many(select = "li.chen.com.business.mapper.OrdersMapper.findById")
)}
)
public List<User> findAllOrders();
}
测试类
package li.chen.com;
import li.chen.com.business.entity.Orders;
import li.chen.com.business.entity.User;
import li.chen.com.business.mapper.OrdersMapper;
import li.chen.com.business.mapper.UserMapper;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class MybatisTest3 {
private UserMapper mapper;
@Before
public void before() throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession(true);
mapper = sqlSession.getMapper(UserMapper.class);
}
@Test
public void testFindAll(){
List<User> mapperAllOrders = mapper.findAllOrders();
for (User mapperAllOrder : mapperAllOrders) {
System.out.println(mapperAllOrder);
}
}
}
//------------------------------------
19:35:35,153 DEBUG findById:159 - ====> Preparing: select * from orders where uid=?
19:35:35,155 DEBUG findById:159 - ====> Parameters: 1(Integer)
19:35:35,157 DEBUG findById:159 - <==== Total: 2
19:35:35,158 DEBUG findById:159 - ====> Preparing: select * from orders where uid=?
19:35:35,159 DEBUG findById:159 - ====> Parameters: 2(Integer)
19:35:35,160 DEBUG findById:159 - <==== Total: 1
19:35:35,161 DEBUG findById:159 - ====> Preparing: select * from orders where uid=?
19:35:35,162 DEBUG findById:159 - ====> Parameters: 4(Integer)
19:35:35,163 DEBUG findById:159 - <==== Total: 0
19:35:35,163 DEBUG findById:159 - ====> Preparing: select * from orders where uid=?
19:35:35,164 DEBUG findById:159 - ====> Parameters: 5(Integer)
19:35:35,164 DEBUG findById:159 - <==== Total: 0
19:35:35,165 DEBUG findAllOrders:159 - <== Total: 4
User{id=1, userName='lucy', passWord='123', birthday=Wed Dec 12 00:00:00 CST 2018, ordersList=[Orders{id=1, orderTime=Wed Dec 12 00:00:00 CST 2018, total=3000.0, uid=1, user=null}, Orders{id=2, orderTime=Wed Dec 12 00:00:00 CST 2018, total=4000.0, uid=1, user=null}]}
User{id=2, userName='haohao', passWord='123', birthday=Thu Dec 12 00:00:00 CST 2019, ordersList=[Orders{id=3, orderTime=Wed Dec 12 00:00:00 CST 2018, total=5000.0, uid=2, user=null}]}
User{id=4, userName='anan', passWord='98584785', birthday=Wed Jan 13 19:32:51 CST 2021, ordersList=[]}
User{id=5, userName='anan', passWord='98584785', birthday=Wed Jan 13 17:58:15 CST 2021, ordersList=[]}
MyBatisz注解的多对多的实现
Role
package li.chen.com.business.entity;
public class Role {
private Integer id;
private String roleName;
private String roleDesc;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
public String getRoleDesc() {
return roleDesc;
}
public void setRoleDesc(String roleDesc) {
this.roleDesc = roleDesc;
}
@Override
public String toString() {
return "Role{" +
"id=" + id +
", roleName='" + roleName + '\'' +
", roleDesc='" + roleDesc + '\'' +
'}';
}
}
User
package li.chen.com.business.entity;
import java.util.Date;
import java.util.List;
public class User {
private Integer id;
private String userName;
private String passWord;
private Date birthday;
//描述的是当前用户存在哪些订单
private List<Orders> ordersList;
//描述的是当前用户具备哪些角色
private List<Role> roleList;
public List<Role> getRoleList() {
return roleList;
}
public void setRoleList(List<Role> roleList) {
this.roleList = roleList;
}
public List<Orders> getOrdersList() {
return ordersList;
}
public void setOrdersList(List<Orders> ordersList) {
this.ordersList = ordersList;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", userName='" + userName + '\'' +
", passWord='" + passWord + '\'' +
", birthday=" + birthday +
", ordersList=" + ordersList +
", roleList=" + roleList +
'}';
}
}
RoleMapper
package li.chen.com.business.mapper;
import li.chen.com.business.entity.Role;
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface RoleMapper {
@Select("select * from sys_user_role ur,sys_role r where r.id=ur.roleId and ur.userId=#{uid}")
public List<Role> findByUid(int uid);
}
UserMapper
package li.chen.com.business.mapper;
import li.chen.com.business.entity.User;
import org.apache.ibatis.annotations.*;
import java.util.List;
public interface UserMapper {
@Select("select * from user")
@Results({
@Result(id = true, column = "id", property = "id"),
@Result(id = true, column = "userName", property = "userName"),
@Result(id = true, column = "passWord", property = "passWord"),
@Result(
property = "roleList",
column = "id",
javaType = List.class, //查询结果为list
many = @Many(select = "li.chen.com.business.mapper.RoleMapper.findByUid")
)}
)
public List<User> findUserAndRole();
}
测试类
package li.chen.com;
import li.chen.com.business.entity.User;
import li.chen.com.business.mapper.UserMapper;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class MybatisTest4 {
private UserMapper mapper;
@Before
public void before() throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession(true);
mapper = sqlSession.getMapper(UserMapper.class);
}
@Test
public void testFindAll(){
List<User> mapperUserAndRole = mapper.findUserAndRole();
for (User user : mapperUserAndRole) {
System.out.println(user);
}
}
}
//----------------------------------------------------
23:20:56,802 DEBUG findByUid:159 - ====> Preparing: select * from sys_user_role ur,sys_role r where r.id=ur.roleId and ur.userId=?
23:20:56,804 DEBUG findByUid:159 - ====> Parameters: 1(Integer)
23:20:56,807 DEBUG findByUid:159 - <==== Total: 2
23:20:56,812 DEBUG findByUid:159 - ====> Preparing: select * from sys_user_role ur,sys_role r where r.id=ur.roleId and ur.userId=?
23:20:56,813 DEBUG findByUid:159 - ====> Parameters: 2(Integer)
23:20:56,816 DEBUG findByUid:159 - <==== Total: 2
23:20:56,817 DEBUG findByUid:159 - ====> Preparing: select * from sys_user_role ur,sys_role r where r.id=ur.roleId and ur.userId=?
23:20:56,818 DEBUG findByUid:159 - ====> Parameters: 4(Integer)
23:20:56,819 DEBUG findByUid:159 - <==== Total: 0
23:20:56,820 DEBUG findByUid:159 - ====> Preparing: select * from sys_user_role ur,sys_role r where r.id=ur.roleId and ur.userId=?
23:20:56,821 DEBUG findByUid:159 - ====> Parameters: 5(Integer)
23:20:56,822 DEBUG findByUid:159 - <==== Total: 0
23:20:56,822 DEBUG findUserAndRole:159 - <== Total: 4
User{id=1, userName='lucy', passWord='123', birthday=Wed Dec 12 00:00:00 CST 2018, ordersList=null, roleList=[Role{id=1, roleName='CTO', roleDesc='CTO'}, Role{id=2, roleName='COO', roleDesc='COO'}]}
User{id=2, userName='haohao', passWord='123', birthday=Thu Dec 12 00:00:00 CST 2019, ordersList=null, roleList=[Role{id=1, roleName='CTO', roleDesc='CTO'}, Role{id=2, roleName='COO', roleDesc='COO'}]}
User{id=4, userName='anan', passWord='98584785', birthday=Wed Jan 13 19:32:51 CST 2021, ordersList=null, roleList=[]}
User{id=5, userName='anan', passWord='98584785', birthday=Wed Jan 13 17:58:15 CST 2021, ordersList=null, roleList=[]}