Mybatis学习

一、使用注解配置SQL语句

采用注解的方式在接口中就可以写SQL语句了,省略了写mapper映射文件,代码如下

public interface UserDao {

    @Select("select * from t_user where userId = #{id}")
    public User findUser(User user);

    public void addUser(User user);

}
  • 注解方式也有局限性,一旦SQL语句太复杂就比较容易混乱。
  • XML配置的方式更稳健。
  • 当然,最终使用什么方法取决于团队。

二、sqlSessionFactory与sqlSessionFactoryBuilder

sqlSessionFactoryBuilder是创建sqlSessionFactory用的一旦创建好就无需在保留,因此,他的作用域应该在方法之中就可以。
sqlSessionFactory一旦创建就会在整个应用过程中存在,他的作用域是Application,而这也是sqlSessionFactoryBuilder用完最好就丢弃的原因。

三、sqlSession

每个线程都有自己的sqlSession实例,sqlSession实例不能被共享,也不是线程安全的。它的作用域最好是Request或者方法体。一个请求到了,打开一个sqlSession,响应过后立马关闭;一个方法开始执行打开一个sqlSession,方法执行完后立马关闭。
必须确保sqlSession在finally中正常关闭

四、mybatis属性值加载顺序

  • 属性文件中的属性项首先被读取
  • 在类路径或URL资源中捕获的属性项第二顺序加载,并且会覆盖属性文件中的属性项
  • 在方法体中给定的参数值最后加载,并且覆盖以上两个顺序属性项的值

aggressiveLazyLoading设置

官方对这两个属性的解释是:

lazyLoadingEnabled 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载。默认:true
aggressiveLazyLoading 当启用时,有延迟加载属性的对象在被调用时将会完全加载任意属性。否则,每种属性将会按需要加载。默认:true

lazyLoadingEnabled:全局性懒加载开关,一旦打开,所有配置都会变为懒加载。

aggressiveLazyLoading:侵略性 lazy loading 开关, 默认为true, 这个属性比较搞笑,如果为true则当你访问任何一个属性都会加载所有的其他lazy load属性,即使你根本没有调用哪个lazy load属性,说白了就是aggressiveLazyLoading=true,则lazy load等于没用,所以要使用lazy load还是将其设为false

个人理解:对象的属性可能关联到其他表的其他对象,懒加载的对象会按需去对关联的对象进行查询,不需要即不加载。aggressiveLazyLoading设置的作用为,比如我们不需要对关联对象进行查询,但是我们懒加载对象的其他属性,那么即使我们并没有调用关联对象,那么关联的对象也会被加载。


typeAliases

typeAliases即别名,是帮助我们少打很多代码的标签,如:

<typeAliases>
    <typeAlias type="edu.tyut.vms.entity.User" alias="User"/>
    <typeAlias type="edu.tyut.vms.entity.Video" alias="Video"/>
</typeAliases>

这样,我们在配置映射文件的时候,在利用到这两个对象的时候就可以直接用User和Video代替,如:

<insert id="addUser" parameterType="User">
     INSERT INTO USER(username,password,r_date,gender,professionid,email,phone,role)
     VALUES (#{u_name},#{password},#{r_date},#{gender},#{profession},#{email},#{phone},#{role})
</insert>

在参数类型parameterType当中,我们就直接写User就可以了,而不需要写User类的路径。

另外,mybatis还为我们准备了一些基本类型的typeAliases方便我们区分。如:

别名 丨 映射的类型
_byte 丨 byte
_long 丨 long
_short 丨 short
_int 丨 int
_integer 丨 int
_double 丨 double
_float 丨 float
_boolean 丨 boolean
string 丨 String
byte 丨 Byte
long 丨 Long
short 丨 Short
int 丨 Integer
integer 丨 Integer
double 丨 Double
float 丨 Float
boolean 丨 Boolean
date 丨 Date
decimal 丨 BigDecimal
bigdecimal 丨 BigDecimal
object 丨 Object
map 丨 Map
hashmap 丨 HashMap
list 丨 List
arraylist 丨 ArrayList
collection 丨 Collection
iterator 丨 Iterator


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值