mybatisplus的使用

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

猜你喜欢

转载自xiaoxiaoher.iteye.com/blog/2406524