@column注解_Mybatis基本知识十七:Mybatis注解式开发-单表注解式开发

上一篇文章:《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。如果数据库还支持多行插入, 也可以传入一个数组或集合,并返回自动生成的主键。

  • 通过<selectKey/>获取主键

对于不支持自动生成主键类型的数据库或可能不支持自动生成主键的JDBC 驱动来说,可以使用<selectKey/>标签获取主键。

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<ProductInfo> findAllListInfo();    /**根据主键查询*/
    @Select("select * from ProductInfo where id = #{id}")
    ProductInfo findById(int id);    /**根据商品编号模糊查询*/
    @Select("select * from ProductInfo where proNo like concat('%',#{proNo},'%')")
    List<ProductInfo> 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<ProductInfo> 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<ProductInfo> 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.基本注解

  • 增删改查相关注解

v2-39311dac49978dd8cc69a17425d55fb6_b.jpg

增删改查相关注解

  • 结果集映射相关注解

v2-d4f207c348e84c03eab05db24ffa12ee_b.jpg

结果集映射相关注解

5.下载练习

链接:https://pan.baidu.com/s/1wxDPaght70sIPEV-DEeT_w 
提取码:4im4
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值