一、使用注解配置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