Mybatis中如何将POJO作为参数传入sql

今天在工作时,需要将获取的用户的注册信息插入数据库,开始的做法是将所有的model的属性作为DAO接口的参数,后来想想不对劲,要是有100个属性,那我这个接口岂不是要有100个参数传进来?

于是我就考虑将整个Model或者DTO作为DAO接口的参数,向SQL传参,具体的实现如下:

(1)定义DAO接口:

1 @Repository
2 public interface ProjectDtoMapper {
3
4     void addProject(@Param("projectDto")ProjectDto projectDto); //这里一定要加这个注解,不然在配置文件中会找不到这个DTO对象
5
6 }

(2)定义service:

 1 @Service
 2 public class ProjectService {
 3     @Resource
 4     private ProjectDtoMapper projectDtoMapper;
 5
 6     public void addProject(ProjectDto projectDto) {
 7         projectDtoMapper.addProject(projectDto);
 8     }
 9
10  }

(3)Mapper.xml配置(重要):

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 3 <mapper namespace="com.kingnetdc.kingnetio.innerapi.service.db.dao.ProjectDtoMapper">
 4
 5     <insert id="addProject" parameterType="com.kingnetdc.kingnetio.innerapi.service.db.dto.background.ProjectDto">
 6         INSERT INTO dana.auth_projects(project_id,project_name,sort,last_edit_date) VALUES
 7             (#{projectDto.project_id},#{projectDto.project_name},#{projectDto.sort},#{projectDto.last_edit_date})
 8     </insert>
 9
10 </mapper>

注意:这里的namespace必须是DAO接口的路径名+类名,parameterType就是对应的DTO的路径名+类名,#{}中的参数写法就是上面接口中加的注解中的别名.属性的名字。

时间: 2024-10-12 22:35:50

Mybatis中如何将POJO作为参数传入sql的相关文章

C#中的datatable类型作为参数传入SQL的存储空间

SQL中首先建立一个结构一样的自定义类型的表格,在存储空间中申明一个此类型的变量,此处注意此时后面必须有readonly,如: @paravalue_insert MaterialStruct readonly,//此处注意此时后面必须有readonly,否则会报错,http://www.mamicode.com/info-detail-1485151.html 当传入多个参数时,可以用Dictionary<string, object>,把参数都包含其中,如: parmWithValue =

在Mybatis中使用注解@多个参数查询

@Select("SELECT * FROM wc_homework WHERE organization_id=#{classId} ORDER BY createtime DESC LIMIT #{start},#{count}") @Results({ @Result(column = "course_id", property = "course_id"), @Result(column = "homework_id"

mybatis中#{}与${}的差别(如何防止sql注入)

默认情况下,使用#{}语法,MyBatis会产生PreparedStatement语句中,并且安全的设置PreparedStatement参数,这个过程中MyBatis会进行必要的安全检查和转义. #相当于对数据 加上 双引号,$相当于直接显示数据 示例1:执行SQL:select * from emp where name = #{employeeName}参数:employeeName=>Smith解析后执行的SQL:select * from emp where name = ? 示例2:

java mybatis 框架下多种类型的参数传入到xml问题

由于公司要求,最近从.net向java 转,然后过程中遇到各种奇葩问题,特在此随记一番. 场景:一个方法中有两个参数,一个List的集合,一个int 类型的参数,最初我在xml的sql参数,无论定义成List还是int都报错,其实仔细一想就能明白,接口方法中定义了两个类型的参数,所以你XML中的参数类型无论定义成什么都是不对的. 原始写法: //========================这个例子是原始错误写法的例子===========Start void batchUpdateUrget

Mybatis中oracle、mysql、db2、sql server的like模糊查询

<!-- oracle --> <select id="searchUserBySearchName" parameterType="java.lang.String" resultType="com.urm.entity.User"> select * from t_user where user_name like CONCAT('%',#{search_name},'%') </select> <!

mybatis中@Param用法

用注解来简化xml配置的时候,@Param注解的作用是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql语句中 我们先来看Mapper接口中的@Select方法 package Mapper; public interface Mapper { @Select("select s_id id,s_name name,class_id classid from student where s_name= #{aaaa} and class_id = #{bbbb}")

mybatis中@Param的用法和作用

用注解来简化xml配置的时候,@Param注解的作用是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql语句中 我们先来看Mapper接口中的@Select方法 package Mapper; @Mapper public interface Mapper { @Select("select s_id id,s_name name,class_id classid from student where s_name= #{aaaa} and class_id = #{bbbb}

mybatis中&quot;#&quot;和&quot;$&quot;的区别

mybatis中"#"和"$"的区别 动态 sql 是 mybatis 的主要特性之一,在 mapper 中定义的参数传到 xml 中之后,在查询之前 mybatis 会对其进行动态解析.mybatis 为我们提供了两种支持动态 sql 的语法:#{} 以及 ${}. 在下面的语句中,如果 username 的值为 zhangsan,则两种方式无任何区别: select * from user where name = #{name}; select * from

Mybatis 实用篇(三)参数处理

Mybatis 实用篇(三)参数处理 sql 语句中的参数 parameterType 可以省略不写. 一.参数封装 1.1 单个参数处理 public interface UserMapper { User getUser(int id); } sql 中 #{} 的值可以随意,mybatis 不做任何处理,eg: <select id="getUser" parameterType="int" resultType="User">