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搞得清爽些,其他的没必要