目录
1.2 resources下新建SqlMapConfig.xml文件
1.3 src/main/java下新建dao和pojo文件夹
2.2 resources 下新建 GeneratorConfig.xml
3.1 新建applicationContext 和 datasource.properties
4.2 where 标签 :会自动将其后第一个条件的and或者是or给忽略掉
4.3 choose, when, otherwise 类似Java中的 switch
4.4 foreach : 对一个集合进行遍历,通常是在构建 IN 条件语句的时候
简介:
Mybatis: 持久层框架,消除了几乎所有的JDBC代码以及参数的手动设置,已经取代了Jdbc
一:连接Mysql
1.1 添加依赖:
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13-beta-3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
1.2 resources下新建SqlMapConfig.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>
<!-- 配置环境 -->
<environments default="mysql">
<!-- 配置mysql的环境-->
<environment id="mysql">
<!-- 配置事务的类型-->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源(连接池) -->
<dataSource type="POOLED">
<!-- 配置连接数据库的4个基本信息 -->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="zhongfayi"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="dao/IUserDao.xml"/>
</mappers>
</configuration>
1.3 src/main/java下新建dao和pojo文件夹
public class User {
private String name;
private Integer id;
private Integer age;
// 省略get,set和toString
}
public interface IUserDao {
List<User> findAll();
}
<?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="dao.IUserDao">
<select id="findAll" resultType="pojo.User">
select * from user
</select>
</mapper>
1.4 src/test/java下新建testM进行测试
public class TestM {
@Test
public void test() throws Exception{
//1.读取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
//3.使用工厂生产SqlSession对象
SqlSession sqlSession = factory.openSession();
//4.使用SqlSession创建Dao接口的代理对象
List<User> selectList = sqlSession.selectList("findAll");
for (User user : selectList) {
System.out.println(user);
}
// 也可以使用代理对象执行方法
IUserDao mapper = sqlSession.getMapper(IUserDao.class);
List<User> userList = mapper.findAll();
for (User user : userList) {
System.out.println(user);
}
//5.释放资源
sqlSession.close();
in.close();
}
}
控制台输出结果:
User{name='张三', id=1, age=1}
User{name='李四', id=2, age=2}
User{name='张三', id=1, age=1}
User{name='李四', id=2, age=2}
二:mybatis-generator代码生成器
2.1 配置pom
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
</dependencies>
<configuration>
<overwrite>true</overwrite>
</configuration>
</plugin>
</plugins>
</build>
2.2 resources 下新建 GeneratorConfig.xml
<?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>
<!-- 引入本地Mysql连接 -->
<classPathEntry location="D:\Users\mysql-connector-java-5.1.34.jar"/>
<context id="mysqlgenerator" targetRuntime="MyBatis3">
<!-- 实体类生成toString 方法 -->
<plugin type="org.mybatis.generator.plugins.ToStringPlugin" />
<!--不生成注释-->
<commentGenerator>
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!-- 配置数据库连接 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/test"
userId="root"
password="" />
<!-- 指定javaBean生成的位置 -->
<javaModelGenerator targetPackage="org.pojo" targetProject="src/main/java" >
<!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
<property name="enableSubPackages" value="true" />
<!-- 是否对model添加 构造函数 -->
<property name="constructorBased" value="true"/>
</javaModelGenerator>
<!--指定sql映射文件生成的位置 -->
<sqlMapGenerator targetPackage="org.dao" targetProject="src/main/resources" >
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- 指定dao接口生成的位置,mapper接口 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="org.dao" targetProject="src/main/java" >
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- table表生成对应的DoaminObject -->
<table tableName="sys_user" domainObjectName="SysUser"></table>
<!-- 不生成Example -->
<!--<table tableName="mmall_cart" domainObjectName="Cart" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>-->
</context>
</generatorConfiguration>
三:整合spring
3.1 新建applicationContext 和 datasource.properties
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!--读取db.properties -->
<context:property-placeholder location="classpath:datasource.properties"/>
<!-- 配置数据源 -->
<bean id="dataSource"
class="com.alibaba.druid.pool.DruidDataSource">
<!--数据库驱动 -->
<property name="driverClassName" value="${jdbc.driver}" />
<!--连接数据库的url -->
<property name="url" value="${jdbc.url}" />
<!--连接数据库的用户名 -->
<property name="username" value="${jdbc.username}" />
<!--连接数据库的密码 -->
<property name="password" value="${jdbc.password}" />
</bean>
<!-- 事务管理器,依赖于数据源 -->
<bean id="transactionManager" class=
"org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!--开启事务注解 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
<!--配置MyBatis工厂 -->
<bean id="sqlSessionFactory"
class="org.mybatis.spring.SqlSessionFactoryBean">
<!--注入数据源 -->
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="mybatis-config.xml"/>
</bean>
<!--配置userMapper对象-->
<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="org.dao.SysUserMapper"/>
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
</beans>
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf-8
jdbc.username=zhongfayi
jdbc.password=123456
3.2 新建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>
<!--配置别名 -->
<typeAliases>
<package name="com.org.pojo"/>
</typeAliases>
<!--配置Mapper的位置 -->
<mappers>
<mapper resource="org/dao/SysUserMapper.xml"/>
</mappers>
</configuration>
3.3 加依赖
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13-beta-3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.6</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.21</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
3.4 进行测试
@Test
public void testSelectByPrimaryKey() throws IOException {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
SysUserMapper userMapper = (SysUserMapper)context.getBean("userMapper");
SysUser sysUser = userMapper.selectByPrimaryKey(1);
System.out.println(sysUser);// SysUser [Hash = 372469954, id=1, username=Admin, telephone=18612344321]
}
四:动态SQL的标签
4.1 if标签:一般用来判断是否为空和是否相等
<select id="selectByName" resultMap="BaseResultMap" parameterType="java.lang.String" >
select
<include refid="Base_Column_List" />
from sys_user
where 1 = 1
<if test="username != null and username!=''and type == '1'.toString()">
and username !=#{username}
</if>
<if test="username != null and username!='' and type == '2'.toString()">
and username =#{username}
</if>
</select>
4.2 where 标签 :会自动将其后第一个条件的and或者是or给忽略掉
<select id="selectByName" resultMap="BaseResultMap" parameterType="java.lang.String" >
select
<include refid="Base_Column_List" />
from sys_user
<where>
<if test="username != null and username!=''and type == '1'.toString()">
and username !=#{username}
</if>
<if test="username != null and username!='' and type == '2'.toString()">
and username =#{username}
</if>
</where>
</select>
4.3 choose, when, otherwise 类似Java中的 switch
<select id="selectTelephone" resultMap="BaseResultMap" parameterType="java.lang.String" >
select
<include refid="Base_Column_List" />
from sys_user
<where>
<choose>
<when test="telephone == '1'.toString()">
and telephone !=#{telephone}
</when>
<when test="telephone == '2'.toString()">
and telephone !=#{telephone}
</when>
<otherwise>
and telephone = 911
</otherwise>
</choose>
</where>
4.4 foreach : 对一个集合进行遍历,通常是在构建 IN 条件语句的时候
<select id="selectIdList" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from sys_user
<where>
<!-- 判断集合不为空 -->
<if test="list != null and list.size > 0">
id in
<foreach item="item" index="index" collection="list"
open="(" separator="," close=")">
#{item}
</foreach>
</if>
</where>
</select>
五:开源分页插件 Page helper
5.1 添加依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.1.0</version>
</dependency>
5.2 写sql
<select id="selectList" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from sys_user
</select>
5.3 测试分页
@Test
public void testPage(){
// 测试分页
int pageNum = 1; //从第几页开始
int pageSize = 3; //每页条数
PageHelper.startPage(pageNum, pageSize);
List<SysUser> userList = userMapper.selectList();
for (SysUser sysUser : userList) {
System.out.println(sysUser);
}
PageInfo pageInfo = new PageInfo(userList);
System.out.println(JSON.toJSONString(pageInfo));