Skip to content

pickear/weasel-mybatis

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

weasel-mybatis
==============
前言


这是一个用于操作mybatis的包,基于普通项目.该包主要封装了对数据库的一些通用CURD操作和数据库的连接。项目基于mybatis-3.2.1


功能

一 通用CRUD数据库操作。通过MybatisRepository接口和MybatisOperations提供了一些通用的CURD数据库操作。


二 分页插件。能过PagePlugin提供自动分页,目前支持MySQL和PostgreSQL数据库的分页。如果需要更多的数据库支持,用户可以实现Dialect接口来实现。


三 C3P0数据源。通过C3P0DataSourceFactory类提供C3P0数据源。


依赖包


要连接数据库,首先要将数据库厂商的连接实现依赖到项目中,在这个包中没有依赖该实现包,需要使用者在自己的应用中依赖。
mysql的依赖配置
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.36</version>
</dependency>

postgresql的依赖配置
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.4-1202-jdbc42</version>
</dependency>

配置


因为该项目是在mybatis之上进行适度的封装,所以mybatis的配置依然适合该项目,更多的mybatis配置可以参考官方文档:http://mybatis.github.io/mybatis-3/zh/index.html
这里给出一个简单的配置供参考,该配置文件在项目中也存在。

首先定义一个jdbc.properties,用于定义数据库的连接信息:
##jdbc settings

#mysql #jdbc.dirverClass=com.mysql.jdbc.Driver
#jdbc.url=jdbc:mysql://127.0.0.1:3306?useUnicode=true&characterEncoding=UTF-8
#jdbc.username=你的用户 名
#jdbc.password=你的密码

#postgresql jdbc.dirverClass=org.postgresql.Driver
jdbc.url=jdbc:postgresql://127.0.0.1:5432/test
jdbc.username=你的用户名
jdbc.password=你的密码

定义mybatis的配置文件(这里需要命名为mybatis_config.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>
<properties resource="jdbc.properties"/>  <!--在上面配置的jdbc.properties文件-->
<settings>
<setting name="cacheEnabled" value="true"/>
<!-- <setting name="lazyLoadingEnabled" value="true"/> --> <!-- 如果这里开方lazyLoad,需要在自己的应用依赖cglib库。似乎在新版本中nybatis默认包含了Javassist,如果想使用cglib要另行配置-->
<setting name="aggressiveLazyLoading" value="false"/>
</settings>

       <typeAliases>   
         <typeAlias alias="User" type="com.weasel.mybatis.test.domain.User"/>   <!--起别名,方便在mapper文件中使用-->
      </typeAliases>  
    
      <plugins>
<plugin interceptor="com.weasel.mybatis.PagePlugin">  <!--定义分页插件--?
<property name="SQL_REGULAR" value=".?queryPage.?"/>  <!--定义插件会拦截哪些语句-->
<!-- <property name="DIALECT" value="com.weasel.mybatis.dialect.impl.MySQLDialect"/> -->  <!--mysql分页方言-->
<property name="DIALECT" value="com.weasel.mybatis.dialect.impl.PostgreSQLDialect"/>  <!--postgresql分页方言-->
</plugin>
     </plugins>

<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="com.weasel.mybatis.C3P0DataSourceFactory">   <!--自定义的c3po factory-->
<property name="driverClass" value="${jdbc.dirverClass}" />
                        <property name="jdbcUrl" value="${jdbc.url}" />
                <property name="user" value="${jdbc.username}" />
                <property name="password" value="${jdbc.password}" />
                <property name="idleConnectionTestPeriod" value="60" />
                <property name="maxPoolSize" value="20" />
                <property name="maxIdleTime" value="1600" />
                <property name="testConnectionOnCheckout" value="true"/>
</dataSource>
</environment>
</environments>

<mappers>   
            <mapper resource="mappers/user.xml" />    <!--用户自定义的mapper文件-->
        </mappers>

</configuration>

如何使用


首先可以自定自己的一个接口,并且该接口继承MybatisRepository接口
public interface UserRepository extends MybatisRepository<Long, User> {


}


定义自己的一个实现类,继承MybatisOperations类,并实现自己定义的接口
public class UserRepositoryImpl extends MybatisOperations<Long, User> implements UserRepository {


}
这样自定义的类就拥有了连接数据库和一些通用的CRUD操作,这些方法来自MybatisOperations,分别有get(ID id);save(T entity);saveBatch(List<T> entities);insert(T entity);update(T entity);delete(T entity); deleteBatch(List<T> entities);query(T entity); queryPage(Page<T> page);方法。
这里值得注意的是save方法,该方法的默认实现是当entity的id值不为空时,认为用户想做的是更新操作,会调用update方法。当entity的id值为空时,认为用户想做的是插入操作,会调用insert方法。


mapper文件的配置


当然,具体的sql语句该包是不知道的,这个还需要用户自己去定义,sql语句的定义在mapper文件中,具体怎么写mapper文件用户可以参考mybatis的官方文档,下面给一个简单的:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.weasel.mybatis.test.domain.User">  

<resultMap id="userResultMap" type="User">
<id property="id" column="id" />
<result property="username" column="username" />
<result property="password" column="password" />
</resultMap>

<select id="getById" resultType="User">
select * from users where id =
#{id}
</select>

<insert id="save" parameterType="User">
insert into users
(id,username,password)
values (#{id},#{username},#{password})
</insert>

<update id="update">
update users set
username = #{username},
password = #{password}
where id = #{id}
</update>

<select id="queryPage" resultMap="userResultMap">
select id as id,
  username as username,
  password as password
   from users
</select>

</mapper>


mapper文件配置的一些注意事项
这里我们看到namespace使用的是com.weasel.mybatis.test.domain.User,即用户类的包路径,这里是一个约定。如果用户不想这样的约定,在继承MybatisOperations类时可以重写getNamespace,自定义namespace。还有个queryPage,因为分页插件中配置了<property name="SQL_REGULAR" value=".?queryPage.?"/>,也即当发起带有queryPage字母的,插件都会拦截,为该请求加上分页,这也是一个约定。
因为MybatisOperations中提供了很多通用的方法,但这些方法的sql语句是都没有写的,框架也不知道用户具体的sql语句怎么写,需要用户自己提供。如果用户需要使用所有MybatisOperations提供的方法,应该在mapper文件中定义以下的sql语句,方法和对应的sql语句的id如下:


get(ID id) <---------> getById
get(T entity) <---------> get
insert(T entity) <---------> save
update(T entity) <---------> update
delete(T entity) <---------> delete
query(T entity) <---------> query
queryPage(Page<T> page) <---------> queryPage

About

一个封装了对mybatis操作的包

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages