目录
前言
MyBatis中也提供了注解式开发⽅式,采⽤注解可以减少Sql映射⽂件的配置。 当然,使⽤注解式开发的话,sql语句是写在java程序中的,这种⽅式也会给sql语句的维护带来成本。
官⽅是这么说的:
使⽤注解编写复杂的SQL是这样的:
@Update(\"<script> update table_name set grade=\'三年级\'”+ \" <if test=\\ \"name != null\\\"> , name = #{name} </if> ”+ \" <if test=\\ \"sex != null\\\"> , sex = #{sex}</if>”+ \" where num = #{num}</script>\") void update(Student student);
原则:简单sql可以注解,复杂sql使⽤xml!使用注解式开发以后三兄弟之一的SqlMapper.xml文件就不需要了!
1. @Insert注解
二兄弟之一CarMapper接口,用来编写方法
使用@Insert的注解方式,在注解上就可以写上SQL语句,对于SQL语句当中的变量就是pojo类Car对应的变量名
package com.bjpowernode.mybatis.mapper; import com.bjpowernode.mybatis.pojo.Car; import org.apache.ibatis.annotations.Insert; public interface CarMapper { // 使用注解式开发,插入数据 @Insert(\"insert into t_car values(null,#{carNum},#{brand},#{guidePrice},#{produceTime},#{carType})\") int insert(Car car); }
二兄弟之二CarMapperTest,用来测试
package com.bjpowernode.mybatis.test; import com.bjpowernode.mybatis.mapper.CarMapper; import com.bjpowernode.mybatis.pojo.Car; import com.bjpowernode.mybatis.utils.SqlSessionUtil; import org.apache.ibatis.session.SqlSession; import org.junit.Test; public class CarMapperTest { @Test public void testInsert(){ SqlSession sqlSession = SqlSessionUtil.openSession(); CarMapper mapper = sqlSession.getMapper(CarMapper.class); // 创建Car对象 Car car = new Car(null, \"666\", \"丰田霸道\", 32.0, \"2023-1-9\", \"燃油车\"); int count = mapper.insert(car); System.out.println(count); sqlSession.commit(); sqlSession.close(); } }
执行结果:
2. @Delete注解
二兄弟之一CarMapper接口,用来编写方法
package com.bjpowernode.mybatis.mapper; import com.bjpowernode.mybatis.pojo.Car; import org.apache.ibatis.annotations.Insert; public interface CarMapper { // 使用注解式开发,删除数据 @Delete(\"delete from t_car where id = #{id}\") int deleteById(Long id); }
二兄弟之二CarMapperTest,用来测试
package com.bjpowernode.mybatis.test; import com.bjpowernode.mybatis.mapper.CarMapper; import com.bjpowernode.mybatis.pojo.Car; import com.bjpowernode.mybatis.utils.SqlSessionUtil; import org.apache.ibatis.session.SqlSession; import org.junit.Test; public class CarMapperTest { @Test public void testDeleteById(){ SqlSession sqlSession = SqlSessionUtil.openSession(); CarMapper mapper = sqlSession.getMapper(CarMapper.class); int count = mapper.deleteById(40L); System.out.println(count); sqlSession.commit(); sqlSession.close(); } }
执行结果:
3. @Update注解
二兄弟之一CarMapper接口,用来编写方法
package com.bjpowernode.mybatis.mapper; import com.bjpowernode.mybatis.pojo.Car; import org.apache.ibatis.annotations.Insert; public interface CarMapper { // 使用注解式开发,更新数据 @Update(\"update t_car set car_num=#{carNum},brand=#{brand},guide_price=#{guidePrice},produce_time=#{produceTime},car_type=#{carType} where id = #{id}\") int update(Car car); }
二兄弟之二CarMapperTest,用来测试
package com.bjpowernode.mybatis.test; import com.bjpowernode.mybatis.mapper.CarMapper; import com.bjpowernode.mybatis.pojo.Car; import com.bjpowernode.mybatis.utils.SqlSessionUtil; import org.apache.ibatis.session.SqlSession; import org.junit.Test; public class CarMapperTest { @Test public void testUpdate(){ SqlSession sqlSession = SqlSessionUtil.openSession(); CarMapper mapper = sqlSession.getMapper(CarMapper.class); // 创建Car对象,根据id进行更新 Car car = new Car(34L, \"666\", \"丰田霸道\", 32.0, \"2023-1-9\", \"燃油车\"); int count = mapper.update(car); System.out.println(count); sqlSession.commit(); sqlSession.close(); } }
执行结果:
4. @Select注解
二兄弟之一CarMapper接口,用来编写方法
package com.bjpowernode.mybatis.mapper; import com.bjpowernode.mybatis.pojo.Car; import org.apache.ibatis.annotations.Insert; public interface CarMapper { // 使用注解式开发,查询数据 @Select(\"select * from t_car where id = #{id}\") Car selectById(Long id); }
二兄弟之二CarMapperTest,用来测试
package com.bjpowernode.mybatis.test; import com.bjpowernode.mybatis.mapper.CarMapper; import com.bjpowernode.mybatis.pojo.Car; import com.bjpowernode.mybatis.utils.SqlSessionUtil; import org.apache.ibatis.session.SqlSession; import org.junit.Test; public class CarMapperTest { @Test public void testSelectById(){ SqlSession sqlSession = SqlSessionUtil.openSession(); CarMapper mapper = sqlSession.getMapper(CarMapper.class); Car car = mapper.selectById(41L); System.out.println(car); sqlSession.close(); } }
执行结果:
5. @Results注解
我们知道数据库表中的字段和pojo类的属性名有的是不一样的,我们之所以能够完整的查出数据,是因为在核心配置文件mybatis-config.xml当中配置了:启用驼峰命名⾃动映射
<!--启⽤驼峰命名⾃动映射--> <settings> <setting name=\"mapUnderscoreToCamelCase\" value=\"true\"/> </settings>
如果我们不启用,不对应的字段就是null,查询的数据如下:
那还有什么办法呢?还可以使用@Results注解!
注:从这里也能看出,使用注解的方式开发,对于简单点的SQL还行,对于稍微复杂的查询语句就太麻烦了!
package com.bjpowernode.mybatis.mapper; import com.bjpowernode.mybatis.pojo.Car; import org.apache.ibatis.annotations.*; public interface CarMapper { // 使用注解式开发,查询数据 @Select(\"select * from t_car where id = #{id}\") @Results({ @Result(property = \"id\",column = \"id\"), @Result(property = \"carNum\",column = \"car_num\"), @Result(property = \"brand\",column = \"brand\"), @Result(property = \"guidePrice\",column = \"guide_price\"), @Result(property = \"produceTime\",column = \"produce_time\"), @Result(property = \"carType\",column = \"car_type\"), }) Car selectById(Long id); }
这样计算我们不启用驼峰命名⾃动映射,也能正常查询数据
结语:直到今天MyBatis的学习就完美撒花了,接下来就开始Spring的学习,敬请期待!
做猪小侠源码的代理,提供一站式服务
如果你不懂得搭建网站或者服务器,小程序,源码之类的怎么办? 第一通过本站学习各种互联网的技术 第二就是联系客服,我帮帮你搭建(当然要收取部分的费用) 第三成为我们的代理,我们提供整套的服务。