上一篇文章:《Mybatis基本知识十六:查询缓存之第三方查询缓存》
若文中有纰漏,请多多指正!!!
1.前言
使用Mybatis进行开发,不仅可以使用mapper配置文件进行开发,也可以使用注解的方式。映射文件中无非就是存放着增、删、改、查的SQL映射标签,Mybatis注解式开发就是要替换映射文件中的SQL标签。
本章节主要讲解单表式注解开发,用于注解开发的入门案例讲解,后续将讲解动态SQL注解式开发以及关联关系型注解开发。
2.数据准备(MySql数据库)
- 表结构
/**商品信息*/create table productinfo( id int primary key auto_increment, --主键 proName varchar(50),--商品名称 proNo varchar(50), --商品编号 proDescription varchar(200)--商品描述);
- 实体映射
public class ProductInfo { private Integer id;//主键 private String proName;//商品名称 private String proNo;//商品编号 private String proDescription;//商品描述}
3.单表的增删改查注解配置
1)Mybatis进行注解开发大概有以下几点事项:
- 只需配置主配置文件。
- mapper配置文件不再需要配置。
- 接口中进行注解配置。
2)关于插入数据自动获取主键的问题(示例中都有配置):
- 可以通过配置insert标签的属性获取主键:
useGeneratedKeys: 配置此属性会告诉MyBatis利用JDBC 的 getGeneratedKeys 方法来取出由数据(比如:MySQL 和 SQL Server 这样的数据库中自动递增字段)内部生成的主键。默认:false。
keyProperty: 标记一个属性(一般为要映射实体的属性), MyBatis 会通过 getGeneratedKeys 或者通过 insert 语句的 selectKey 子元素设置它的值。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。
keyColumn :通过生成的键值设置表中的列名。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。如果数据库支持自动生成主键的字段(比如 MySQL 和 SQL Server),那么你可以设置 useGeneratedKeys=”true”,然后再把 keyProperty 设置到目标属性上就OK。如果数据库还支持多行插入, 也可以传入一个数组或集合,并返回自动生成的主键。
- 通过获取主键
对于不支持自动生成主键类型的数据库或可能不支持自动生成主键的JDBC 驱动来说,可以使用标签获取主键。
3)增删改查的简单配置如下:
- 注解配置
/**Dao层接口*/public interface ProductInfoDao { /**保存信息,并返回主键**/ @Insert("insert into ProductInfo(proName,proNo,proDescription) values(#{proName},#{proNo},#{proDescription})") @Options(useGeneratedKeys = true,keyProperty="id",keyColumn="id") //@SelectKey(statement="select @@identity",keyColumn="id",keyProperty="id",before=false,resultType = int.class) void saveProducrInfoCatchID(ProductInfo proInfo); /**获取所有返回LIST*/ @Select("select * from ProductInfo") @Results({ @Result(id=true,property="id",column="id"), @Result(property="proName",column="proName"), @Result(property="proNo",column="proNo"), @Result(property="proDescription",column="proDescription") }) List findAllListInfo(); /**根据主键查询*/ @Select("select * from ProductInfo where id = #{id}") ProductInfo findById(int id); /**根据商品编号模糊查询*/ @Select("select * from ProductInfo where proNo like concat('%',#{proNo},'%')") List findProInfoByProNo(String proNo); //删除 @Delete("delete from productInfo where id = #{id}") void deleteByID(int id); //修改 @Update("update productInfo set proName = #{proName},proNo=#{proNo},proDescription=#{proDescription} where id = #{id}") void updateProduct(ProductInfo info);}
- 测试方法
public class TestDemo { private ProductInfoDao dao; SqlSession sqlSession = null; @Before public void setUp() throws Exception{ sqlSession = MyBatisUtil.getSqlSession(); dao = sqlSession.getMapper(ProductInfoDao.class); } /**保存信息,并返回主键**/ @Test public void saveProducrInfoCatchID(){ ProductInfo proInfo = new ProductInfo("电冰箱","002","最新款电冰箱"); System.out.println("执行前:"+proInfo); dao.saveProducrInfoCatchID(proInfo); System.out.println("执行后:"+proInfo); sqlSession.commit();//提交 } //查询所有 @Test public void findAllListInfo(){ List list = dao.findAllListInfo(); if(list != null){ for (ProductInfo productInfo : list) { System.out.println(productInfo); } } } /**根据主键查询*/ @Test public void findById(){ ProductInfo pro = dao.findById(4); System.out.println(pro); } /**根据商品编号模糊查询*/ @Test public void findProInfoByProNo(){ List list = dao.findProInfoByProNo("001"); if(list != null){ for (ProductInfo productInfo : list) { System.out.println(productInfo); } } } /**简单删除*/ @Test public void deleteByID(){ dao.deleteByID(7); } /**简单修改*/ @Test public void updateProductById(){ //1.查询修改对象 ProductInfo beforeInfo = dao.findById(6); System.out.println("执行前beforeInfo:"+beforeInfo); //2.修改值 beforeInfo.setProDescription("修改了电视"); //3.执行更新操作 dao.updateProduct(beforeInfo); //4.再查询 ProductInfo afterInfo = dao.findById(6); System.out.println("执行后afterInfo:"+afterInfo); } @After public void setDown(){ if(sqlSession != null) sqlSession.close(); }}
进行完DAO接口的注解配置,一个简单的单表的增删改查也就完成了。有兴趣的learner可以亲自动手试一下。
4.基本注解
- 增删改查相关注解
5.下载练习
链接:https://pan.baidu.com/s/1wxDPaght70sIPEV-DEeT_w 提取码:4im4