原创

springboot集成mybatis

1.Mybatis简介

Mybatis原名是ibatis,是apache的开源项目,是一个持久层的框架,与数据库进行交互,将数据持久化到关系型数据库中,目前托管在github中;
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

1.1 xml配置文件

<?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.mybatistest.UserMapper">
<select id="GetUserByID" parameterType="int" resultType="com.mybatistest.dao.User">
select id,name,age from `student` where id = #{id}
</select>

<insert
id="saveUser" parameterType="com.test.springtest.User"
useGeneratedKeys="true">
insert into student(NAME,AGE) values (#{name},#{age})
</insert> <delete id="deleteAll"> delete from student </delete> <update id="update"> updatae student set NAME=#{name},AGE=#{age} where id=#{id}
</update> </mapper>

<mapper namespace="com.mybatistest.UserMapper">  所有的mybaits的xml文件都是以mapper节点开始,namespace 指定xml文件映射对应的java类,包名加类名。

1.1.1 select标签

<select > 标签说明是一个查询的sql ,具体如下

<select id="GetUserByID" parameterType="int" resultType="com.mybatistest.dao.User">

id:在该xml文件里必须唯一,标识方法名称,该id值 即为mapper标签里的namespace对应的java类里的方法名称,通过调用java类里的方法,即可调用到该方法名对应的xml id的sql语句。

parameterType :标识入参类型,可以是int,string,也可以是一个实体,也可以是一个map

resultType:标识返回值类型,可以是简单类型,也可以是一个实体。如果是实体就会做ORM映射,把查询结果的字段映射到java实体的属性上

#{}预编译:用一个占位符 ? 代替参数:select * from t_user where userName = ?,这样可以有效防止sql注入

${} 会把值拼接到sql语句里,就类似于如下效果 select * from t_user where userName = '" + userName + "'

1.1.2 insert/update/delete

这三个标签分别说明插入、更新、删除操作,最关键的属性为id,xml文件唯一,且该id值 为mapper标签里的namespace对应的java类里的方法名称,通过调用java类里的方法,即可调用到该方法名对应的xml id的sql语句。

其他高级用法请关注微信公众号,在后续的项目案例会一一进行介绍

2.项目案例

项目结构如下所示:

  

1.新建一个maven工程,pom文件中引入mybatis的依赖,mysq的依赖(本案例是以springboot构建的,不熟悉的可以参考之前的文章:http://javain.net/article/12http://javain.net/article/13:)

<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<!--mybatis -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.4</version>
</dependency>

<!--druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.28</version>
</dependency>

2.在mysql中新建一个table

CREATE TABLE `student` (
`num` varchar(12) NOT NULL COMMENT '学号',
`name` varchar(36) DEFAULT NULL COMMENT '姓名',
`age` int(3) DEFAULT NULL COMMENT '年龄',
`telphone` varchar(11) DEFAULT NULL COMMENT '手机',
PRIMARY KEY (`num`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3.创建实体类:Student.java。字段与数据库字段一一对应

package com.mytest1.demo.entity;

public class Student {

private String num;
private String name;
private int age;
private String telphone;

public String getNum() {
return num;
}
public void setNum(String num) {
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getTelphone() {
return telphone;
}
public void setTelphone(String telphone) {
this.telphone = telphone;
}
}

4.创建StudentMapper接口类,即xml mapper节点里的namespace类

package com.mytest1.demo.mapper;

public interface StudentMapper {

}

5.在src/main/resource里新建一个文件夹:mapper,用来存放xml文件

在mapper文件夹里新建一个StudentMapper.xml文件,定义了四个方法,分别如下:

<?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.mytest1.demo.mapper.StudentMapper">

<select id="getByNum" parameterType="string" resultType="com.mytest1.demo.entity.Student">
select num,name,age,telphone from student where num=#{num}
</select>

<insert id="add">
insert into student(num,name,age,telphone) values(#{num},#{name},#{age},#{telphone})
</insert>

<delete id="deleteByNum">
delete from student where num=#{num}
</delete>

<update id="update">
update student set name=#{name},age=#{age},telphone=#{telphone} where num=#{num}
</update>

</mapper>

6.这四个方法的Id 写到对应的java类中,即完善一下StudentMapper

package com.mytest1.demo.mapper;

import com.mytest1.demo.entity.Student;

/**
* xml文件里的id与接口的方法名一一对应
* Package : com.mytest1.demo.mapper
*
* @author chenlong12
* 2019年11月2日 下午2:52:17
*
*/
public interface StudentMapper {

Student getByNum(String num);

void add(Student student);

void deleteByNum(String num);

void update(Student student);
}

7.新建StudentController用来测试,代码如下:

package com.mytest1.demo.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.mytest1.demo.entity.Student;
import com.mytest1.demo.mapper.StudentMapper;

@RestController
@RequestMapping("student")
public class StudentController {

@Autowired
private StudentMapper studentMapper;

@RequestMapping("add")
private String add(){
Student student = new Student();
student.setNum("10001");
student.setAge(10);
student.setName("javain");
student.setTelphone("13161692056");

studentMapper.add(student);

return "success";
}

        @RequestMapping("get")
private Student get(){
return studentMapper.getByNum("10001");
}

@RequestMapping("update")
private String update(){
Student student = new Student();
student.setNum("10001");
student.setAge(11);
student.setName("javain.net");
student.setTelphone("18600201924");

studentMapper.update(student);

return "success";
}

@RequestMapping("delete")
private String delete(){
studentMapper.deleteByNum("10001");
return "success";
}

}

8.在application.properties里添加mybatis的配置和数据库连接的配置

mybatis.configuration.map-underscore-to-camel-case=true
mybatis.mapper-locations=mapper/*.xml

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useSSL=false&useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=123456

解释:

mybatis.configuration.map-underscore-to-camel-case 标识是否开通驼峰映射,true标识开通,即把数据库下划线按照驼峰的形式映射到java实体属性,比如数据库字段:user_name 映射到java属性:userName。

 mybatis.mapper-locations 定义mapper存放的位置。(src/main/resource 下的位置)

spring.datasource 的为数据路的配置。

9.修改启动类 

在启动类上添加mapper 类的扫描路径

package com.mytest1.demo;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.mytest1.demo.mapper")
public class Application {

public static void main(String[] args) {
SpringApplication.run(Application.class, args);
System.out.println("服务启动成功");
}
}

@MapperScan  该注释指定xml文件里的namespace对应的java类文件路径

10.运行程序,访问对应的controller路径即可完成数据库操作

源码下载路径:链接: https://pan.baidu.com/s/1iQfUuIclsYwzZMPihfQS5w 提取码: fyfe 

正文到此结束