@DS("zw-mysqldb")
public interface CarMapper extends BaseMapper<Car> {
@Select("select * from car where car_seq = #{carSeq}")
Car queryCar(String carSeq);
}
@RequestMapping("/ok")
public void testCustomSQL2() {
Car car = carMapper.queryCar("11");
System.out.println(car.toString());
}补充:
1)使用@Param注解
当以下面的方式进行写SQL语句时:
@Select("select column from table where userid = #{userid} ")
public int selectColumn(int userid);
当你使用了使用@Param注解来声明参数时,如果使用 #{} 或 ${} 的方式都可以。
@Select("select column from table where userid = ${userid} ")
public int selectColumn(@Param("userid") int userid);
当你不使用@Param注解来声明参数时,必须使用使用 #{}方式。如果使用 ${} 的方式,会报错。
@Select("select column from table where userid = ${userid} ")
public int selectColumn(@Param("userid") int userid);
2)不使用@Param注解
不使用@Param注解时,参数只能有一个,并且是Javabean。在SQL语句里可以引用JavaBean的属性,而且只能引用JavaBean的属性。
// 这里id是user的属性
@Select("SELECT * from Table where id = ${id}")
Enchashment selectUserById(User user);
上面的代码中使用了注解SQL的方式,通过@Select注解指定了SQL语句。在方法中使用@Param注解指定参数名称,可以方便的进行参数传递,参数名称与sql参数名称一致可省略。
QueryWrapper<Entity> wrapper = new QueryWrapper<>();b)设置查询条件
wrapper.eq("column1", value1)
.ne("column2", value2)
.like("column3", value3);
//示例
wrapper.eq("car_state", "1")
.like("car_id", "渝A");c)设置排序条件(非必须)
wrapper.orderByAsc("car_id")d)设置分页条件(非必须)
Page<Car> resultPage = new Page<>(1, 10);
carMapper.selectByPrimaryKey(resultPage,wrapper)e)mapper接口
@Select("select * from car ${ew.customSqlSegment}")
Page<Car> selectByPrimaryKey(Page<Car> page, @Param(Constants.WRAPPER) QueryWrapper<Car> queryWrapper);f)执行SQL操作
//分页查询方式1
QueryWrapper<Car> wrapper = new QueryWrapper<>();
Page<Car> resultPage = new Page<>(1, 10);
wrapper.eq("car_state", "1")
.like("car_id", "渝A")
.orderByAsc("car_id");//排序
carMapper.selectByPrimaryKey(resultPage,wrapper);
//分页查询方式2
IPage<Car> page = new Page<>(1, 10); // 分页查询
LambdaQueryWrapper<Car> qw = new LambdaQueryWrapper<Car>()
.like(Car::getCarId, "渝A") // 车牌号 =
.eq(Car::getCarState, 1); // 状态
//selectPage是BaseMapper自带方法
IPage<Car> userPage = carMapper.selectPage(page, qw);
public List<UserEntity> getUserList(String name, Integer age) {
LambdaQueryWrapper<UserEntity> qw = new LambdaQueryWrapper<UserEntity>()
.eq(StringUtils.isNotEmpty(name), UserEntity::getName, name) // 姓名 = name
.gt(age != null, UserEntity::getAge, age); // 年龄 > age
return userMapper.selectList(qw);
}以上代码中,我们通过LambdaQueryWrapper实现了动态的查询操作。如果传入的name参数不为空,那么就会添加一个等于查询条件;如果传入的age参数不为空,那么就会添加一个大于查询条件。
List<Object> objs = userMapper.selectObjs(
new QueryWrapper<User>().select("max(age)").eq("name", "张三")
);
Car selectBySeq @Param(Constants.WRAPPER) QueryWrapper<Car> queryWrapper);2)xml配置文件
<select id="selectBySeq " resultMap="BaseResultMap">
select * from `car` ${ew.customSqlSegment}
</select>3)通过Wapper传递查询参数
例select("id", "name", "age")
上面两种方式任意选择一种,参数都是Wrapper
@RequestMapping("/ok")
public void testCustomSQL2() {
LambdaQueryWrapper<Car> query = new LambdaQueryWrapper<>();
query.eq(Car::getCarId, "11");
Car car= carMapper.queryCarSeq(query);
System.out.println(car.toString());
}
//或者
Wrapper wrapper = new QueryWrapper<Car>().eq("car_state", 1).like("cai_id", "渝");
List<Car> userList = carMapper.queryCarSeq(wrapper);XML文件SQL和Wrapper传参结合的优点在于提高了代码的可维护性、可读性和安全性,适用于代码量大,需要多人协作开发的场景,并且能够防止SQL注入攻击
//xml文件式,myabtis原生方式
Car selectByAnnotationXML(String seq);在mapper下创建文件UserDao.xml
<select id="selectByAnnotationXML" parameterType="java.lang.String" resultMap="BaseResultMap">
select *
from car
where car_seq = #{seq,jdbcType=VARCHAR}
</select>这种方式是在接触mybatis时候,最基础的方式
免责申明:
本文系转载,版权归原作者所有,如若侵权请联系我们进行删除!
《数据治理行业实践白皮书》下载地址:https://fs80.cn/4w2atu
《数栈V6.0产品白皮书》下载地址:https://fs80.cn/cw0iw1
想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:https://www.dtstack.com/?src=bbs
同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术群」,交流最新开源技术信息,群号码:30537511,项目地址:https://github.com/DTStack