一、映射文件
映射文件中的$和#
<mapper namespace
="com.sxt.pojo.userMapper">
<insert id
="adduser" parameterType
="com.sxt.pojo.User">
insert into
mybatis(name
,password
) values(#
{name
},#
{password
})
</insert
>
</mapper
>
在上例映射文件中,我们取得传递的参数的方式是 #{名称} 这种方式可以直接获取配置后传递过来的参数,但是我们还可以使用另外一种方法获取。那就是 ${名称} 。但是这种方式需要我们在配置参数时加上注解 @Param(“名称”) 它就好像一个Map一样,这个名称是key 而真正的名称是value
但是他们最大的区别是#{ }底层是通过preparedStatement实现的,他避免了SQL注入的问题,而${ }的底层是通过Statement实现赋值的。
二、动态SQL语句
select
* from t_user where
<if test
="username != null">
username
=#
{username
}
</if>
<if test
="username != null">
and sex
=#
{password
}
</if>
动态SQL语句就例如上述代码一般,他能够灵活的拼接SQL语句,让你更轻松的使用。除了If以外MyBatis还提供了很多的语句,但是因为后面利用逆向工程的方式可以自动生成,所以这里就不多述。
三、缓存
1、缓存的分类
Mybatis支持一级缓存和二级缓存,但是实际上很少用他自带的二级缓存。
2、实现
1.一级缓存: MyBatis中一级缓存是基于SqlSession的,周期在close关闭后就结束了。 当.close了以后就表示清空了以及缓存,再次打印的话就会报错,因为缓存中已经没有数据了。
2.二级缓存: 二级缓存基于SqlSessionFactory,一级缓存用到的不多。二级缓存是进程级别的缓存,用的比较普遍,二级缓存mybatis本身没有提供,常用的主键有Ehcache和Redis,这里我们使用Ehcache 使用Ehcache我们需要导入依赖 然后我们在映射文件的mapper中加入代码,加入后就代表当前配置文件中的所有操作,二级缓存都会生效 三级缓存这里暂时不讲,等后面讲集群时再讲。
三、逆向工程
逆向工程就是通过数据库中的单表,自动生成java代码。Mybatis官方提供了逆向工程,可以针对单表自动生成mybatis代码(mapper.java\mapper.xml)企业中,逆向工程是个很常用的工具,比我们手动创建映射文件的配置信息方便很多。
1、安装插件
在Eclipse操作:Help ----> Eclipse Marketplace… 然后在打开的窗口中的Find中输入MyBatis 然后点击install 如果已经安装了这个插件的话就会显示installed
2、配置文件
<?xml version
="1.0" encoding
="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration
>
<!-- 数据库的驱动包路径
-->
<classPathEntry location
="这里是你的maven库中的mysql-connector-java-5.1.21.jar包的路径" />
<context id
="DB2Tables" targetRuntime
="MyBatis3">
<!-- 去掉生成文件中的注释
-->
<commentGenerator
>
<property name
="suppressAllComments" value
="true" />
</commentGenerator
>
<!-- 数据库链接
URL、用户名、密码
-->
<jdbcConnection driverClass
="com.mysql.jdbc.Driver"
connectionURL
=URL"
userId
="账号"
password
="密码">
</jdbcConnection
>
<!-- <jdbcConnection driverClass
="oracle.jdbc.driver.OracleDriver"
connectionURL
="jdbc:oracle:thin:@localhost:1521:XE"
userId
="car"
password
="car">
···
</jdbcConnection
> -->
<!-- 注释掉的是oracle的配置
-->
<javaTypeResolver
>
<property name
="forceBigDecimals" value
="false" />
</javaTypeResolver
>
<!-- 生成模型的包名和位置
-->
<javaModelGenerator targetPackage
="com.dpb.model" targetProject
="mybatis12-generate\src">
<!-- 是否在当前路径下新加一层schema
,eg:fase路径com
.oop
.eksp
.user
.model,
true:com
.oop
.eksp
.user
.model
.[schemaName
] -->
<property name
="enableSubPackages" value
="false" />
<property name
="trimStrings" value
="true" />
</javaModelGenerator
>
<!-- 生成的映射文件包名和位置
-->
<sqlMapGenerator targetPackage
="com.dpb.mapper" targetProject
="mybatis12-generate\src">
<property name
="enableSubPackages" value
="false" />
</sqlMapGenerator
>
<!-- 生成
DAO的包名和位置
-->
<javaClientGenerator type
="XMLMAPPER" targetPackage
="com.dpb.mapper"
targetProject
="mybatis12-generate\src">
<property name
="enableSubPackages" value
="false" />
</javaClientGenerator
>
<!-- 这里是你的表,如果你想要多个表,在这里添加就是
-->
<table tableName
="t_user" domainObjectName
="UserBean" >
</table
>
</context
>
</generatorConfiguration
>
然后右击你的配置文件 点这小黑鸟,然后就能自动生成接口、配置文件还有javabean啦。
3、生成的接口中的方法的含义
4、带条件查询(selectByExample)
public class DbUtils {
private static SqlSessionFactory factory
;
public static SqlSessionFactory
getSessionFactory(){
if (factory
==null) {
try {
InputStream
in=Resources
.getResourceAsStream("你自己的xml.xml");
return new SqlSessionFactoryBuilder().build(in);
} catch (IOException e
) {
e
.printStackTrace();
}
}
return factory
;
}
}
@Override
public List
<User
> query() {
UserMapper dao
= DbUtils
.getSessionFactory().openSession(true).getMapper
(UserMapper
.class);
UserExample example
=new UserExample();
Criteria createCriteria
= example
.createCriteria();
if (name
!=null && !"".equals(name
)) {
createCriteria
.andNameEqualTo(name
);
}
return dao
.selectByExample(example
);
}
Mybatis与Spring的整合
1、导入依赖
<!-- mybatis和spring整合包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
<!-- c3p0 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
以及一些前面用过的Spring包和日志、数据库驱动、mybatis包。
2、创建
创建spring的XML文件
<!-- 开启扫描
-->
<context
:component
-scan base
-package="com.sxt.service.serviccImp"/>
<bean
class="com.mchange.v2.c3p0.ComboPooledDataSource" id
="comboPooledDataSource">
<property name
="driverClass" value
="com.mysql.jdbc.Driver"/>
<property name
="jdbcUrl" value
="数据库URL"/>
<property name
="user" value
="账号"/>
<property name
="password" value
="密码"/>
</bean
>
<!-- 整合Mybatis
-->
<bean
class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 关联Mybatis的配置文件
-->
<property name
="configLocation" value
="mybatis.xml"/>
<!-- 关联数据源
-->
<property name
="dataSource" ref
="comboPooledDataSource"/>
</bean
>
<!-- 指定Dao接口位置 即dao扫描路径
-->
<bean
class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name
="basePackage" value
="com.sxt.mapper"/>
</bean
>
创建mybatis的一个XML文件
<?xml version
="1.0" encoding
="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration
>
</configuration
>
因为Spring的XML文件中配置了,所以mybatis就不用配置一些东西, 也可以在mybaits中配置,然后Spring就不用配置了。然后上面的案例就能使用Spring的注解去优化了