mybatis中动态sql
传入的参数是java对象的情况下,那么是如何解析对象中的name属性的
用parameter的el表达式。
MyBatis动态传参
1. Dao和Mapper的关系
在dao接口层,dao的方法名对应mapper.xml的ID
2. MyBatis如何实现动态传参
1. 书写mapper 的SQL
2. 书写dao层,注意方法名要和mapper里的id保持一致
3. 参数数量和类型保持一致,并使用注解@Param("bookName")对应mapper的参数名
如果只有一个入参,可以不写@Param注解,但不建议
3. MyBatis的代理功能
全程公用一个SqlSessionFactory
1. 复制MyBatisUtil工具类到util包
2. 修改service配置
4. MyBatis的生命周期2
1. 首先加载mybatis-config.xml总配置文件,根据development的参数配置连接数据库;查询mappers映射关系,找到mapper.xml配置文件
2. 执行mapper.xml文件,该文件记录了运行SQL
3. 在dao接口层,dao的方法名对应mapper.xml的ID
一个表 对应 一个实体 对应 一个mapper 对应 一个dao
4. 在service层,通过工具类获取连接;通过代理模式(反射)获取dao接口对象
5. 调用dao接口方法,执行SQL语句
6. 关闭SqlSession
5. 插入,修改,删除示例
https://www.cnblogs.com/ZXDZXD/p/12522526.html
<insert id="saveEmployee" parameterType="Employee">
insert into emp values(#{employee.name},#{employee.age})
</insert>
拿插入标签来说吧。传递了一个对象,对象对应的全限定路径类名在parameterType属性中指定。
通过#{}标签来获取动态值,里面可以是字符串,对象等。
解析对象时,会通过全限定路径类名找到当前类,并通过属性名找到对应的方法。默认get+属性名首字符大写
如:getName(){}
找到属性对应的这个方法后,就能获取到对象中某个属性值了。
tableName.column = #{Object.field}
MetaObject.getValue
看你mapper中是否对参数对象添加注解,
如果有注解的话 假设注解为obj xml中就用obj.name就可以
没有注解,直接使用类的属性名name就可以