失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > JAVAEE框架技术之10-myBatis注解式开发

JAVAEE框架技术之10-myBatis注解式开发

时间:2022-09-07 03:22:55

相关推荐

JAVAEE框架技术之10-myBatis注解式开发

Mybatis注解开发

注解开发只需要写mapper接口即可,无需再书写对应的xxMapper.xml映射文件

对于单表操作还是比较方便的,但对多表操作就维护起来就比较麻烦了

数据库准备

添加依赖

<!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.12</version><scope>provided</scope></dependency><!-- mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.6</version></dependency><!-- mysql驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.16</version></dependency><!-- 测试用例 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><!-- 日志 --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.6.4</version></dependency>

核心配置文件

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-////DTD Config 3.0//EN""/dtd/mybatis-3-config.dtd"><configuration><!-- 引入外部的配置文件 --><properties resource="jdbc.properties"/><!-- 开启驼峰匹配 --><settings><setting name="mapUnderscoreToCamelCase" value="true"/></settings><!-- 连接数据库相关的配置 后面不用写,spring代替--><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${driverClass}"/><property name="url" value="${url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></dataSource></environment></environments><mappers><package name="cn.yanqi.mapper"/></mappers></configuration>

jdbc.properties

driverClass=com.mysql.jdbc.Driverurl=jdbc:mysql:///mybatisjdbc.username=rootjdbc.password=root

单表操作

实体类

@Datapublic class User {private Long id;// 用户名private String userName;// 密码private String password;// 姓名private String name;// 年龄private Integer age;// 性别,1男性,2女性private Integer sex;// 出生日期private Date birthday;// 创建时间private Date created;// 更新时间private Date updated;}

Mapper接口

/*** @Auther: yanqi* @Date:* @Dese:*/public interface UserMapper {@Select("select * from tb_user where id = #{id}")User findById(int id);@Select("select * from tb_user")List<User> selectAll();@Insert("INSERT INTO tb_user(id, user_name, password, name, age, sex, birthday, created, updated) VALUES (null,#{userName},#{password},#{name},#{age},#{sex},#{birthday},#{created},#{updated})")void adduser(User user);@Delete("delete from tb_user where id = #{id}")void delete(int id);@Update("update tb_user set user_name =#{userName} , updated = #{updated} where id =#{id}")void updateuser(User user);}

测试

/*** @Auther: yanqi* @Date:* @Dese:*/public class UserMapperTest {private UserMapper userMapper;private SqlSession sqlSession ;private SqlSessionFactory sqlSessionFactory ;@Beforepublic void setUp() throws Exception {String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);sqlSession = sqlSessionFactory.openSession();userMapper = sqlSession.getMapper(UserMapper.class);}/*** 查询单个*/@Testpublic void select() {User user = this.userMapper.findById(1);System.out.println(user);}/*** 查询所有*/@Testpublic void selectAll() {List<User> users = this.userMapper.selectAll();for(User user : users){System.out.println(user);}}/*** 添加*/@Testpublic void adduser() {User user = new User();user.setUserName("小江江");user.setPassword("123");user.setName("一燕");user.setAge(27);user.setSex(2);user.setBirthday(new Date());user.setCreated(new Date());user.setUpdated(new Date());this.userMapper.adduser(user);mit();}/*** 删除*/@Testpublic void delete() {this.userMapper.delete(114);mit();}/*** 修改*/@Testpublic void updateuser() {User user = new User();user.setId(118L);user.setUserName("哈哈2");user.setUpdated(new Date());this.userMapper.updateuser(user);mit();}}

一对一

实体类

/*** 订单表*/@Datapublic class Order {private Integer id;private Long userId;private String orderNumber;private User user;}

Mapper接口

/*** @Auther: yanqi* @Dese: OrderMapper接口 实现一对一*/public interface OrderMapper {/*** 查询订单,并且查询出下单人的信息* @param* @return*/@Select("select * from tb_order where order_number = #{orderNum}")@Results({/*映射usercolumn: order表中user_id外键,传递给UserMapper.findById的idproperty: order实体类中的user字段*/@Result(column = "id",property ="user",javaType = User.class,one = @One(select = "cn.yanqi.mapper.UserMapper.findById"))})List<Order> oneToOne(String orderNum);}

public interface UserMapper {@Select("select * from tb_user where id = #{id}")User findById(int id);}

测试

/*** @Auther: yanqi* @Date:* @Dese:*/public class UserMapperTest {private UserMapper userMapper;private OrderMapper orderMapper;private SqlSession sqlSession ;private SqlSessionFactory sqlSessionFactory ;@Beforepublic void setUp() throws Exception {String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);sqlSession = sqlSessionFactory.openSession();userMapper = sqlSession.getMapper(UserMapper.class);orderMapper = sqlSession.getMapper(OrderMapper.class);}/*** 测试一对一*/@Testpublic void oneToOne(){List<Order> orders = this.orderMapper.oneToOne("002");for(Order order : orders){System.out.println(order);}}

一对多

实体类

/*** 订单表* */@Datapublic class Order {private Integer id;private Long userId;private String orderNumber;private User user;private List<Orderdetail> orderdetails;}

@Datapublic class Orderdetail {private Integer id;private Double totalPrice;private Integer status;}

Mapper接口

/*** @Auther: yanqi* @Date:* @Dese:*/public interface OrderMapper {/*** 查询订单,查询出下单人信息并且查询出订单详情。*/@Select("select * from tb_order where order_number = #{orderNum}")@Results({/*映射user*/@Result(column = "id",property ="user",javaType = User.class,one = @One(select = "cn.yanqi.mapper.UserMapper.findById")),/*映射orderdetails*/@Result(column = "id",property = "orderdetails",javaType =List.class,many = @Many(select = "cn.yanqi.mapper.OrderDetailMapper.findById"))})List<Order> oneToMany(String orderNum);}

/*** @Auther: yanqi*/public interface OrderDetailMapper {/*** 根据id查询订单详情* @param id*/@Select("select * from tb_orderdetail where id = #{id}")Orderdetail findById(int id);}

测试

/*** @Auther: yanqi* @Date:* @Dese:*/public class UserMapperTest {private UserMapper userMapper;private OrderMapper orderMapper;private SqlSession sqlSession ;private SqlSessionFactory sqlSessionFactory ;@Beforepublic void setUp() throws Exception {String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);sqlSession = sqlSessionFactory.openSession();userMapper = sqlSession.getMapper(UserMapper.class);orderMapper = sqlSession.getMapper(OrderMapper.class);}/*** 测试一对多*/@Testpublic void oneToMany(){List<Order> orders = this.orderMapper.oneToMany("002");for(Order order : orders){System.out.println(order);}

多对多

实体类

/*** 订单详情*/@Datapublic class Orderdetail {private Integer id;private Double totalPrice;private Integer status;//商品信息private Item item;}

/*** 商品表*/@Datapublic class Item {private Integer id;private String itemName;private Float itemPrice;private String itemDetail;}

Mapper接口

public interface OrderMapper {/*** 查询订单,查询出下单人信息并且查询出订单详情中的商品数据。*/@Select("select * from tb_order where order_number = #{orderNum}")@Results({/*映射user*/@Result(column = "id",property ="user",javaType = User.class,one = @One(select = "cn.yanqi.mapper.UserMapper.findById")),/*映射orderdetails*/@Result(column = "id",property = "orderdetails",javaType =List.class,//查询Item商品many = @Many(select = "cn.yanqi.mapper.ItemMapper.findById"))})List<Order> manyToMany(String orderNum);}

public interface ItemMapper {@Select("select * from tb_item where id = #{id}")List<Item> findById(Integer id);}

测试

/*** 测试多对多*/@Testpublic void manyToMany() {List<Order> orders = this.orderMapper.manyToMany("002");for (Order order : orders) {System.out.println(order);}}

如果觉得《JAVAEE框架技术之10-myBatis注解式开发》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。