09 mybatis的注解开发(注解实现增删改查及多表查询)

本文介绍了如何使用MyBatis注解进行增删改查操作,包括@Insert、@Update、@Delete、@Select的使用。同时,详细展示了如何实现一对一和一对多的结果集映射,以及通过@One和@Many注解处理关联关系。在测试类中,验证了这些功能的正确性。
摘要由CSDN通过智能技术生成
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>-->
<!--        &lt;!&ndash;扫描使用注解的类所在的包&ndash;&gt;-->
<!--        <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=[]}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

岿然如故

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值