mybatis是将jdbc的驱动注册,connection、preparedstatement创建,参数设置,结果映射等进行包装。让开发者专注于sql代码的开发。mybatisplus则是进一步包装,替程序员将通用的CRUDsql代码生成。
接下来讲讲怎么使用,现在数据库中新建表People有两个字段主键id int ,name varchar2(20):
1.添加pom依赖
//依赖与spring配合mybatis中一样,只是用以下依赖替换mhbatis和mybatis-spring的依赖,记得去掉这两个,不然可能冲突
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>2.0.1</version>
</dependency>
2.配置文件
主要是将mybatis的sqlSessionFactory替换成mybatis-plus的即可,mybatis-plus只做一些功能的扩展
<!-- 自动扫描 -->
<context:component-scan base-package="com.cq.mybatis" />
<!-- 引入配置文件 -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:db.properties" />
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${name}" />
<property name="password" value="${password}" />
</bean>
<!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
<bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 自动扫描mapping.xml文件,**表示迭代查找 -->
//这个用于下文中的mybatis传统方法
<property name="mapperLocations" value="classpath:com/cq/mybatis/**/*.xml" />
//扫描这些包下的@TableName注释的model对象
<property name="typeAliasesPackage" value="classpath:com/cq/mybatis/model" />
<property name="configuration" ref="mybatisConfig"/>
<property name="plugins">
<array>
<!-- 分页插件配置 -->
<bean id="paginationInterceptor" class="com.baomidou.mybatisplus.plugins.PaginationInterceptor">
</bean>
<bean id="performanceInterceptor"
class="com.baomidou.mybatisplus.plugins.PerformanceInterceptor"/>
</array>
</property>
<property name="globalConfig" ref="globalConfig" />
</bean>
<!-- DAO接口所在包名,Spring会自动查找其下的类 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.cq.mybatis.mapper" />
</bean>
<!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="mybatisConfig" class="com.baomidou.mybatisplus.MybatisConfiguration">
<!-- 这个配置表示数据库表用下划线分割单词的命名方式 而pojo则用驼峰命名法 -->
<property name="mapUnderscoreToCamelCase" value="true"/>
<!-- 部分数据库不识别默认的NULL类型(比如oracle,需要配置该属性 -->
<!-- <property name="jdbcTypeForNull"> -->
<!-- <util:constant static-field="org.apache.ibatis.type.JdbcType.NULL"/> -->
<!-- </property> -->
</bean>
<bean id="globalConfig" class="com.baomidou.mybatisplus.entity.GlobalConfiguration">
<!--
AUTO->`0`("数据库ID自增")
INPUT->`1`(用户输入ID")
ID_WORKER->`2`("全局唯一ID")
UUID->`3`("全局唯一ID")
-->
<property name="idType" value="3" />
<!--
MYSQL->`mysql`
ORACLE->`oracle`
DB2->`db2`
H2->`h2`
HSQL->`hsql`
SQLITE->`sqlite`
POSTGRE->`postgresql`
SQLSERVER2005->`sqlserver2005`
SQLSERVER->`sqlserver`
-->
<!-- Oracle需要添加该项 -->
<!-- <property name="dbType" value="oracle" /> -->
<!-- 全局表为下划线命名设置 true 作用与mapUnderscoreToCamelCase差不多两个选一个就行 -->
<property name="dbColumnUnderline" value="true" />
</bean>
3.在com/cq/mybatis/model包下新建一个People对象
@TableName("people")
public class People implements Serializable{
private int id;
private String name;
}
这里注解中的值“people”对应数据库中的表people。如果这个people类有一个属性firstName,根据上面配置数据库中则应该有一个字段first_name,然而people表中并没有这个字段,则应该在People类中的firstName属性上面添加一个注解@TableField(exist=false)
4.在com.cq.mybatis.mapper中新建dao层接口PeopleMapper,我猜MapperScannerConfigurer扫描到它时,生成动态代理类,然后注入sqlSession对象,然后根据他继承BaseMapper以及泛型People生成对应的CRUD方法,在根据类全路径名以及方法名myAddPeople到mapper文件中查找对应内容生成方法
public interface PeopleMapper extends BaseMapper<People>{
//mybatisplus的dao层继承baseMapper<T>生成的动态代理类就会有基本CRUD方法
//这个方法用于mabatis的传统方法对应下面配置文件
void myAddPeople(People people);
}
5.在com.cq.mybatis包下建一个peopleMapper.xml配置文件
<mapper namespace="com.cq.mybatis.mapper.PeopleMapper">
//对应dao中的myAddPeople方法
<insert id="myAddPeople" parameterType="com.cq.mybatis.model.People">
insert into people(id,first_name) values(#{id},#{firstName})
</insert>
</mapper>
6.新建service层PeopleService
@Service
public class PeopleService extends ServiceImpl<PeopleMapper, People>{
public void addPeople(People people){
baseMapper.myAddPeople(people);
}
}
PeopleService继承了ServiceImpl,mybatisplus通过这种方式为我们注入了PeopleMapper,这样可以使用ServiceImpl默认为我们提供的许多方法,也可以调用我们自己在dao层编写的操作数据库的方法
7.写一个类测试一下
public class PeopleAction {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("spring-mybatisplus.xml");
PeopleService service = (PeopleService) context.getBean("peopleService");
//service自带selectById方法
People people = service.selectById(1);
System.out.println(people);
}
}
个人觉得在多是进行单表操作的系统中可以用mybatis-plus搞得清爽些,其他的没必要