MyBatis在使用中不知不觉积累了很多经验
1.#和$
MyBatis/Ibatis中#和$的区别
1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id".
2. $将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为order by id.
3. #方式能够很大程度防止sql注入。
4.$方式无法防止Sql注入。
5.$方式一般用于传入数据库对象,例如传入表名.
6.一般能用#的就别用$.
ps:在使用mybatis中还遇到<![CDATA[]]>的用法,在该符号内的语句,将不会被当成字符串来处理,而是直接当成sql语句,比如要执行一个存储过程。
2.if
引用where 1=1 再
<if test="user!=null"> and user =#{user} </if>
更好的方式是
<select id="findActiveBlogLike" resultType="Blog"> SELECT * FROM BLOG <where> <if test="state != null"> and state = #{state} </if> </where> </select>
参考:
mybatis 使用经验小结
3.获得数据库返回值
说明,首先sqlmapper里这两种写法都可以
<insert id="addTest" parameterType="blog.csdn.unix21.Bean"> <selectKey resultType="Integer" keyProperty="id" order="AFTER" > SELECT @@IDENTITY AS id </selectKey> insert into test_hm (name,city) values (#{name,jdbcType=VARCHAR}, #{city,jdbcType=VARCHAR} ) </insert> <insert id="addTest1" parameterType="blog.csdn.unix21.Bean" useGeneratedKeys="true" keyProperty="id"> insert into test_hm (name,city) values (#{name,jdbcType=VARCHAR}, #{city,jdbcType=VARCHAR} ) </insert>
insert代码
public int addTest(TestBean t) throws Exception { String resource = "conf_test.xml"; //加载mybatis 的配置文件(它也加载关联的映射文件) Reader reader = Resources.getResourceAsReader(resource); //构建sqlSession 的工厂 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader); //创建能执行映射文件中sql 的sqlSession SqlSession session = sessionFactory.openSession(); //映射sql 的标识字符串 String statement = "sqlMapper.addTest1"; //执行查询返回一个唯一user 对象的sql int r=0; try { r = session.insert(statement, t); session.commit(); } finally { session.close(); } System.out.println(r); return r;
注意:需要commit和close.
数据库自增的id返回在bean里了,不能直接从session.insert(statement, t)获取,这个获取的是数据库改版的行数,如果只insert那么这个返回的是1。
参考:
MyBatis魔法堂:Insert操作详解(返回主键、批量插入)
4.使用Mybatis-Generator自动生成Dao、Model、Mapping相关文件
Mybatis属于半自动ORM,在使用这个框架中,工作量最大的就是书写Mapping的映射文件,由于手动书写很容易出错,我们可以利用Mybatis-Generator来帮我们自动生成文件。
关于Mybatis-Generator的下载可以到这个地址:https://github.com/mybatis/generator/releases
参考:http://www.cnblogs.com/lichenwei/p/4145696.html