MyBatis点滴积累

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中还遇到的用法,在该符号内的语句,将不会被当成字符串来处理,而是直接当成sql语句,比如要执行一个存储过程。

 

2.if

引用where 1=1 再

 and user =#{user} 

更好的方式是

参考:

mybatis 使用经验小结

 

3.获得数据库返回值

说明,首先sqlmapper里这两种写法都可以


        
        
        SELECT @@IDENTITY AS id
        
        insert into test_hm (name,city)
        values (#{name,jdbcType=VARCHAR},
        #{city,jdbcType=VARCHAR}
        )


        insert into test_hm (name,city)
        values (#{name,jdbcType=VARCHAR},
        #{city,jdbcType=VARCHAR}
        )

 

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.

 

MyBatis点滴积累_第1张图片
 

 数据库自增的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

 

 

你可能感兴趣的:(Java)