MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github 。
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
本机主要介绍mybatis通过xml配置方式操作数据库,这也是项目开发中通用的一种,将sql编写在xml中,便于维护、开发、升级等,不需要做太多的改动即可使用。
创建maven项目
在pom.xml中引入依赖包
xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>com.example.springbootgroupId>
<artifactId>springboot-mybatisartifactId>
<version>0.0.1-SNAPSHOTversion>
<packaging>jarpackaging>
<name>springboot-mybatisname>
<description>Demo project for Spring Bootdescription>
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>1.5.12.RELEASEversion>
<relativePath/>
parent>
<properties>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
<java.version>1.7java.version>
<mybatis-spring.version>1.3.2mybatis-spring.version>
<mybatis-pagehelper.version>4.1.0mybatis-pagehelper.version>
properties>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
<dependency>
<groupId>org.mybatis.spring.bootgroupId>
<artifactId>mybatis-spring-boot-starterartifactId>
<version>${mybatis-spring.version}version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<scope>runtimescope>
dependency>
<dependency>
<groupId>com.github.pagehelpergroupId>
<artifactId>pagehelperartifactId>
<version>${mybatis-pagehelper.version}version>
dependency>
dependencies>
<build>
<finalName>springboot-mybatisfinalName>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>
plugins>
build>
project>
在src/main/resources/application.properties配置文件中增加数据库连接
#服务端口 #server.port=8088 #server.context-path=/springboot #mysql数据连接 spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.username=root spring.datasource.password=root #spring.datasource.max-active=20 #spring.datasource.max-idle=8 #spring.datasource.min-idle=8 #spring.datasource.initial-size=20 #mybatis 配置 # 配置映射文件加载 mybatis.mapper-locations=classpath*:mapper/*.xml # 实体类通过别名使用 #mybatis.type-aliases-package=com.example.springboot.mybatis.entity编写实体类
package com.example.springboot.mybatis.entity; public class User { private String id; private String username; private String password; private String email; /** * 是否可用(0禁用,1可用) */ private Integer useable; /** * 创建时间 */ private String addtime; /** * 登陆时间 */ private String logintime; /** * 登陆IP */ private String loginip;
编写dao类
package com.example.springboot.mybatis.dao; import com.example.springboot.mybatis.entity.User; import org.apache.ibatis.annotations.Mapper; import java.util.List; /** * 基于接口编程,通过mybatis与spring整合注入,在xml中编写sql语句 */ @Mapper public interface UserMapper { ListqueryList(); void save(User user); void batchDelete(Integer[] ids); void update(User user); }
编写dao对应xml配置文件
创建src/main/resources/mapper/UserMapper.xml文件,内容如下:
xml version="1.0" encoding="UTF-8"?>
mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.springboot.mybatis.dao.UserMapper">
<select id="queryList" resultType="com.example.springboot.mybatis.entity.User">
SELECT u.id, u.username, u.password, u.email, u.useable, u.addtime, u.logintime, u.loginip FROM t_user u
select>
<select id="queryById" resultType="com.example.springboot.mybatis.entity.User">
SELECT u.id, u.username, u.password, u.email, u.useable, u.addtime, u.logintime, u.loginip FROM t_user u where u.id = #{id}
select>
<insert id="save">
insert into t_user(id,username, password, email, useable, addtime)
values(#{id},#{username}, #{password}, #{email}, #{useable}, now())
insert>
<update id="update">
update t_user set password = #{password}, email = #{email}, useable = #{useable} where id = #{id}
update>
<delete id="batchDelete">
delete from m_user where id in
<foreach collection="array" item="item" open="(" separator="," close=")">
#{item}
foreach>
delete>
mapper>
编写service类
package com.example.springboot.mybatis.service; import com.example.springboot.mybatis.dao.UserMapper; import com.example.springboot.mybatis.entity.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import java.util.List; /** * @desc 通过mybatis xml配置文件读取数据 * @Author wangsh * @date 2018/5/5 23:12 * @return */ @Service public class UserService2 { @Autowired private UserMapper userMapper; public ListqueryList() { List queryList = userMapper.queryList(); return queryList; } public void batchDelete(Integer[] ids) { userMapper.batchDelete(ids); } // REQUIRED:表示必须又事物管理,如果没有事物,就创建一个事物 @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, timeout = 36000, rollbackFor = Exception.class) public void update(User user) { userMapper.update(user); } // REQUIRED:表示必须又事物管理,如果没有事物,就创建一个事物 @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, timeout = 36000, rollbackFor = Exception.class) public void save(User user) { userMapper.save(user); } }
编写controller类
package com.example.springboot.mybatis.web; import com.example.springboot.mybatis.entity.User; import com.example.springboot.mybatis.service.UserService; import com.example.springboot.mybatis.service.UserService2; import com.example.springboot.mybatis.util.UUIDUtil; import com.github.pagehelper.PageHelper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.List; /** * @desc mybatis 操作数据库查询示例 * @Author wangsh * @date 2018/5/5 23:18 * @return */ @RestController @RequestMapping("/user") public class UserController { /** * 通过mybatis xml配置文件读取数据 */ @Autowired private UserService2 userService2; @RequestMapping("/queryList2") @ResponseBody public List编写启动服务类queryList() { List queryList = userService2.queryList(); return queryList; } @RequestMapping("/save2") @ResponseBody public User save2() { User user = new User(); user.setId(UUIDUtil.getUUID()); user.setUsername("lisi"); user.setPassword("lisi"); userService2.save(user); return user; } }
package com.example.springboot.mybatis; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.transaction.annotation.EnableTransactionManagement; /** * @desc mybatis启动服务 * @Author wangsh * @date 2018/5/5 23:20 * @return */ @SpringBootApplication //如果mybatis中service实现类中加入@Transaction事务注解,需要此处添加该注解 @EnableTransactionManagement //扫描的是mapper.xml中namespace指向值的包位置 @MapperScan("com.example.*") public class SpringbootMybatisApplication { public static void main(String[] args) { SpringApplication.run(SpringbootMybatisApplication.class, args); } }
启动服务测试
浏览器输入: http://localhost:8080//user/queryList2