• MyBatis注解实现增删改查


    pom.xml

    1. <dependencies>
    2. <!--mybatis坐标-->
    3. <dependency>
    4. <groupId>org.mybatis</groupId>
    5. <artifactId>mybatis</artifactId>
    6. <version>3.5.4</version>
    7. </dependency>
    8. <!--mysql驱动坐标-->
    9. <dependency>
    10. <groupId>mysql</groupId>
    11. <artifactId>mysql-connector-java</artifactId>
    12. <version>5.1.6</version>
    13. <scope>runtime</scope>
    14. </dependency>
    15. <!--单元测试坐标-->
    16. <dependency>
    17. <groupId>junit</groupId>
    18. <artifactId>junit</artifactId>
    19. <version>4.12</version>
    20. <!-- <scope>test</scope>-->
    21. </dependency>
    22. </dependencies>

    User.java

    1. //编写实体类 对应映射User表
    2. public class User implements Serializable {
    3. private Integer id;
    4. private String username;
    5. private Date birthday;
    6. private String sex;
    7. private String address;
    8. private List<Order> orderList;
    9. // 保存用户角色列表
    10. private List<Role> roleList;
    11. public User() {
    12. }
    13. public User(String username, Date birthday, String sex, String address) {
    14. this.username = username;
    15. this.birthday = birthday;
    16. this.sex = sex;
    17. this.address = address;
    18. }
    19. public User(Integer id, String username, Date birthday, String sex, String address, List<Order> orderList) {
    20. this.id = id;
    21. this.username = username;
    22. this.birthday = birthday;
    23. this.sex = sex;
    24. this.address = address;
    25. this.orderList = orderList ;
    26. }
    27. @Override
    28. public String toString() {
    29. return "User{" +
    30. "id=" + id +
    31. ", username='" + username + '\'' +
    32. ", birthday=" + birthday +
    33. ", sex='" + sex + '\'' +
    34. ", address='" + address + '\'' +
    35. ", orderList=" + orderList +
    36. ", roleList=" + roleList +
    37. '}';
    38. }
    39. public List<Role> getRoleList() {
    40. return roleList;
    41. }
    42. public void setRoleList(List<Role> roleList) {
    43. this.roleList = roleList;
    44. }
    45. public Integer getId() {
    46. return id;
    47. }
    48. public void setId(Integer id) {
    49. this.id = id;
    50. }
    51. public String getUsername() {
    52. return username;
    53. }
    54. public void setUsername(String username) {
    55. this.username = username;
    56. }
    57. public Date getBirthday() {
    58. return birthday;
    59. }
    60. public void setBirthday(Date birthday) {
    61. this.birthday = birthday;
    62. }
    63. public String getSex() {
    64. return sex;
    65. }
    66. public void setSex(String sex) {
    67. this.sex = sex;
    68. }
    69. public String getAddress() {
    70. return address;
    71. }
    72. public void setAddress(String address) {
    73. this.address = address;
    74. }
    75. public List<Order> getOrderList() {
    76. return orderList;
    77. }
    78. public void setOrderList(List<Order> orderList) {
    79. this.orderList = orderList;
    80. }
    81. }

    Role.java

    1. package com.qiku.popo;
    2. public class Role {
    3. private Integer id;
    4. private String roleNmae;
    5. private String roleDesc;
    6. public Role() {
    7. }
    8. @Override
    9. public String toString() {
    10. return "Role{" +
    11. "id=" + id +
    12. ", roleNmae='" + roleNmae + '\'' +
    13. ", roleDesc='" + roleDesc + '\'' +
    14. '}';
    15. }
    16. public Integer getId() {
    17. return id;
    18. }
    19. public void setId(Integer id) {
    20. this.id = id;
    21. }
    22. public String getRoleNmae() {
    23. return roleNmae;
    24. }
    25. public void setRoleNmae(String roleNmae) {
    26. this.roleNmae = roleNmae;
    27. }
    28. public String getRoleDesc() {
    29. return roleDesc;
    30. }
    31. public void setRoleDesc(String roleDesc) {
    32. this.roleDesc = roleDesc;
    33. }
    34. }

    Order.java

    1. package com.qiku.popo;
    2. import java.io.Serializable;
    3. import java.util.Date;
    4. public class Order implements Serializable {
    5. private Integer id;
    6. private Date orderTime;
    7. private double money;
    8. // 表示当前订单属于哪个用户
    9. private User user;
    10. public Order() {
    11. }
    12. public Order(Integer id, Date orderTime, double money, User user) {
    13. this.id = id;
    14. this.orderTime = orderTime;
    15. this.money = money;
    16. this.user = user;
    17. }
    18. @Override
    19. public String toString() {
    20. return "Order{" +
    21. "id=" + id +
    22. ", orderTime=" + orderTime +
    23. ", money=" + money +
    24. ", user=" + user +
    25. '}';
    26. }
    27. public Integer getId() {
    28. return id;
    29. }
    30. public void setId(Integer id) {
    31. this.id = id;
    32. }
    33. public Date getOrderTime() {
    34. return orderTime;
    35. }
    36. public void setOrderTime(Date orderTime) {
    37. this.orderTime = orderTime;
    38. }
    39. public double getMoney() {
    40. return money;
    41. }
    42. public void setMoney(double money) {
    43. this.money = money;
    44. }
    45. public User getUser() {
    46. return user;
    47. }
    48. public void setUser(User user) {
    49. this.user = user;
    50. }
    51. }

    UserMapper.java

    1. package com.qiku.mapper;
    2. import com.qiku.popo.Order;
    3. import com.qiku.popo.User;
    4. import org.apache.ibatis.annotations.*;
    5. import java.util.List;
    6. @CacheNamespace
    7. public interface UserMapper {
    8. @Insert("insert into user (username , birthday , sex , address)" + " values (#{username} , #{birthday} , #{sex} , #{address})")
    9. public void addUser(User user);
    10. @Delete("delete from user where id = #{id}")
    11. public void deleteUser(Integer id);
    12. @Update("update user set address = #{address} where id = #{id}")
    13. public void updateUser(User user);
    14. @Select("select * from user")
    15. public List<User> findAllUser();
    16. @Select("select * from user where id = #{id}")
    17. public User findUserById(Integer id);
    18. @Select("select * from user")
    19. @Results({
    20. @Result(id = true , column = "id" ,property = "id"),
    21. @Result(column = "username" , property = "username"),
    22. @Result(column = "birthday" , property = "birthday"),
    23. @Result(column = "sex" , property = "sex"),
    24. @Result(column = "address" , property = "address"),
    25. @Result(property = "orderList" , javaType = List.class , column = "id" , many = @Many(select = "com.qiku.mapper.OrderMapper.findOrderByUid"))
    26. })
    27. public List<User> findAllUserWithOrder();
    28. // 查询所有用户 及其 角色信息
    29. @Select("select * from user")
    30. @Results({
    31. @Result(id = true , column = "id" ,property = "id"),
    32. @Result(column = "username" , property = "username"),
    33. @Result(column = "birthday" , property = "birthday"),
    34. @Result(column = "sex" , property = "sex"),
    35. @Result(column = "address" , property = "address"),
    36. @Result(property = "roleList" , javaType = List.class , column = "id" , many = @Many(select = "com.qiku.mapper.RoleMapper.findRoleByUid"))
    37. })
    38. public List<User> findAllUserWithRole();
    39. }

    RoleMapper.java

    1. public interface RoleMapper {
    2. @Select("select * from sys_role r LEFT JOIN sys_user_role ur on r.id = ur.roleid WHERE ur.userid = #{userId}")
    3. public List<Role> findRoleByUid(Integer userId);
    4. }

    OrderMapper.java

    1. public interface OrderMapper {
    2. // 查询所有订单 及 订单的用户信息
    3. @Select("select * from orders ")
    4. @Results({
    5. @Result(id = true , column = "id" ,property = "id"),
    6. @Result(column = "ordertime" , property = "orderTime"),
    7. @Result(column = "total" , property = "money"),
    8. @Result(property = "user" , javaType = User.class , column = "uid" ,
    9. one = @One(select = "com.qiku.mapper.UserMapper.findUserById" ,
    10. fetchType = FetchType.EAGER))
    11. })
    12. public List<Order> findAllOrderWithUser();
    13. // 根据用户id(uid)查询订单信息
    14. @Select("select * from orders where uid = #{uid}")
    15. @Results({
    16. @Result(id = true , column = "id" , property = "id"),
    17. @Result(column = "ordertime" , property = "orderTime"),
    18. @Result(column = "total" , property = "money")
    19. })
    20. public List<Order> findOrderByUid(Integer uid);
    21. }

    核心配置文件

    SqlMapConfig.xml

    1. <?xml version="1.0" encoding="UTF-8" ?>
    2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    3. "http://mybatis.org/dtd/mybatis-3-config.dtd">
    4. <configuration>
    5. <!-- 加载外部文件-->
    6. <properties resource="jdbc.properties"/>
    7. <!-- 控制台打印sql语句-->
    8. <settings>
    9. <setting name="logImpl" value="STDOUT_LOGGING"/>
    10. <!--所有方法都会延迟加载-->
    11. <!-- <setting name="lazyLoadTriggerMethods" value="toString()"/>-->
    12. <!-- 因为cacheEnabled的取值默认就为true,所以这一步可以省略不配置。
    13. 为true代表开启二级缓存;为false代表不开启二级缓存。
    14. -->
    15. <setting name="cacheEnabled" value="true"/>
    16. </settings>
    17. <!-- 配置数据库环境-->
    18. <environments default="mysql01">
    19. <environment id="mysql01">
    20. <transactionManager type="JDBC"></transactionManager>
    21. <dataSource type="POOLED">
    22. <property name="driver" value="${jdbc.driver}"/>
    23. <property name="url" value="${jdbc.url}"/>
    24. <property name="username" value="${jdbc.username}"/>
    25. <property name="password" value="${jdbc.password}"/>
    26. </dataSource>
    27. </environment>
    28. </environments>
    29. <!-- 加载映射文件-->
    30. <mappers>
    31. <!-- resource ; 属性加载的是 接口的xml文件-->
    32. <!-- <mapper resource="com/qiku/mapper/UserMapper.xml"/>-->
    33. <!-- <mapper resource="com/qiku/mapper/OrderMapper.xml"/>-->
    34. <!-- class 属性加载的是接口的全路径名-->
    35. <!-- <mapper class="com.qiku.mapper.UserMapper"/>-->
    36. <!-- 指定加载包的位置, 推荐-->
    37. <package name="com.qiku.mapper"/>
    38. </mappers>
    39. </configuration>

    jdbc.properties

    1. jdbc.driver=com.mysql.jdbc.Driver
    2. jdbc.url=jdbc:mysql://localhost:3306/mydb03
    3. jdbc.username=root
    4. jdbc.password=123456

    测试类

    UserMapperTEst.java

    1. package com.qiku.test;
    2. import com.qiku.mapper.UserMapper;
    3. import com.qiku.popo.User;
    4. import org.apache.ibatis.io.Resources;
    5. import org.apache.ibatis.session.SqlSession;
    6. import org.apache.ibatis.session.SqlSessionFactory;
    7. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    8. import org.junit.Test;
    9. import java.io.IOException;
    10. import java.io.InputStream;
    11. import java.util.Date;
    12. import java.util.List;
    13. public class UserMapperTEst {
    14. @Test
    15. public void testAddUser() throws IOException {
    16. InputStream resource = Resources.getResourceAsStream("SqlMapConfig.xml");
    17. SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resource);
    18. SqlSession sqlSession = factory.openSession();
    19. UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    20. User user = new User("关羽" , new Date() , "男" , "蜀国" );
    21. mapper.addUser(user);
    22. sqlSession.commit();
    23. }
    24. @Test
    25. public void testUpdateUser() throws IOException {
    26. InputStream resource = Resources.getResourceAsStream("SqlMapConfig.xml");
    27. SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resource);
    28. SqlSession sqlSession = factory.openSession();
    29. UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    30. User user = new User("关羽" , new Date() , "男" , "河东" );
    31. user.setId(4);
    32. mapper.updateUser(user);
    33. sqlSession.commit();
    34. }
    35. @Test
    36. public void testFindAllUser() throws IOException {
    37. InputStream resource = Resources.getResourceAsStream("SqlMapConfig.xml");
    38. SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resource);
    39. SqlSession sqlSession = factory.openSession();
    40. UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    41. List<User> userList = mapper.findAllUser();
    42. System.out.println(userList);
    43. }
    44. @Test
    45. public void testDeleteUser() throws IOException {
    46. InputStream resource = Resources.getResourceAsStream("SqlMapConfig.xml");
    47. SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resource);
    48. SqlSession sqlSession = factory.openSession();
    49. UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    50. mapper.deleteUser(3);
    51. sqlSession.commit();
    52. }
    53. @Test
    54. public void testFindAllUserWithOrder() throws IOException {
    55. InputStream resource = Resources.getResourceAsStream("SqlMapConfig.xml");
    56. SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resource);
    57. SqlSession sqlSession = factory.openSession();
    58. UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    59. List<User> userList = mapper.findAllUserWithOrder();
    60. for (User u : userList){
    61. System.out.println(u);
    62. }
    63. }
    64. @Test
    65. public void testFindAllUserWithRole() throws IOException {
    66. InputStream resource = Resources.getResourceAsStream("SqlMapConfig.xml");
    67. SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resource);
    68. SqlSession sqlSession = factory.openSession();
    69. UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    70. List<User> userList = mapper.findAllUserWithRole();
    71. for (User u : userList){
    72. System.out.println(u);
    73. }
    74. }
    75. }

    OrderMapperTest.java

    1. public class OrderMapperTest {
    2. @Test
    3. public void testFindAllOrderWithUser() throws IOException {
    4. InputStream resource = Resources.getResourceAsStream("SqlMapConfig.xml");
    5. SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resource);
    6. SqlSession sqlSession = factory.openSession();
    7. OrderMapper mapper = sqlSession.getMapper(OrderMapper.class);
    8. List<Order> orderList = mapper.findAllOrderWithUser();
    9. for (Order o : orderList){
    10. System.out.println(o);
    11. }
    12. }
    13. }

    LocalCacheTest02.java

    1. public class LocalCacheTest02 {
    2. @Test
    3. public void localCacheTest01() throws IOException {
    4. InputStream resource = Resources.getResourceAsStream("SqlMapConfig.xml");
    5. SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resource);
    6. SqlSession sqlSession1 = factory.openSession();
    7. UserMapper mapper1 = sqlSession1.getMapper(UserMapper.class);
    8. User userById1 = mapper1.findUserById(1);
    9. System.out.println("====第一次查询====:" + userById1);
    10. //将结果存入二级缓存
    11. sqlSession1.commit();
    12. SqlSession sqlSession2 = factory.openSession();
    13. UserMapper mapper2 = sqlSession2.getMapper(UserMapper.class);
    14. User userById2 = mapper2.findUserById(1);
    15. System.out.println("====第二次查询====:" + userById2);
    16. }
    17. }

    使用注解实现复杂映射开发

    我们在映射文件中通过配置 <resultMap><association><collection> 来实现复杂关系映射。
    使用注解开发后,我们可以使用 @Results、@Result,@One、@Many 注解组合完成复杂关系的配置。

    在这里插入图片描述

     

  • 相关阅读:
    模拟面试01
    网页下拉菜单
    【ArcGIS微课1000例】0046:制图表达(1)---什么是制图表达?
    【若依(ruoyi)】bootstrapTable 有选中行按钮可用,无选中行按钮不可用/单选和多选按钮样式
    C++ Qt数据库模块介绍
    Jenkins+Svn+Docker搭建持续集成环境 自动部署
    Pyramid 中的wtforms中的SelectField和通过javascript添加标签选项
    850. 矩形面积 II:扫描线+离散化+线段树
    Netty进阶——粘包与半包(代码示例)
    关于ABAP 中的标题行(又叫表头行或者 header line)的理解
  • 原文地址:https://blog.csdn.net/chaochaodayizhi/article/details/125490380