Spring boot----整合mybatis(mysql)

来源:互联网 发布:网络电影剧本 编辑:程序博客网 时间:2024/05/30 05:41

这篇文章是在上篇博客,搭建好demo工程的基础上开始的,前面的过程就不赘述了。

mybatis,我现在理解是对数据库对象进行管理的一个框架。

首先需要去下载一个mysql,并安装。

登录mysql后,在里面添加一张表,具体的操作不在这里讲了,我把命令写在这里

create database test2;

use test2;

create table info(

id int,

name varchar(10),

age int

);

为了测试,我们插入一下假数据

insert into info values(1,"tom",12);

insert into info values(2,"jak",14);

insert into info values(3,"lili",13);

insert into info values(4,"tomas",14);

insert into info values(5,"john",12);


接下来开始,进行demo的搭建。

1.修改application.properties,把服务器信息录入

spring.datasource.driver-class-name=com.mysql.jdbc.Driver #这是驱动类,不修改,就这么写spring.datasource.url=jdbc:mysql://localhost:3306/test2   #这是服务器地址和端口,没有修改的话,就这么写,test2是刚才在mysql中建的database的名字spring.datasource.username=root                           #用户名spring.datasource.password=root                           #密码spring.datasource.max-active=10                           #默认设置spring.datasource.max-idle=5                              #默认设置spring.datasource.min-idle=0                              #默认设置

2.在resource下建一个文件夹mybatis,在下面建一个文件DaoMapper.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"><!-- namespace必须指向Dao接口 --><mapper namespace="com.hjf.boot.demo.boot_mybatis.dao.TestDao">    <!-- 所有列 -->    <sql id="Column_list">        id,        name,        age    </sql>    <!--type="TestPOJO"  这里需要使用自定义类型或者系统预定义数据类型,不能乱写 -->    <resultMap id="ListTest" type="TestPOJO" >        <id  column="id" property="id" />        <result column="name" property="name" />        <result column="age" property="age" />    </resultMap>    <!-- 查询的sql语句  -->    <!--  parameterType 能传输基本数据类型(只能传输一个)            通过#{参数名}获取            如果是传输复杂数据类型,通过#{属性名}或 #{map的KeyName}即可获取传入的值    -->    <select id="get" parameterType="int" resultMap="ListTest">        SELECT        <include refid="Column_list" />        FROM info        WHERE  id= #{age}    </select>    <delete id="delete" parameterType="int" >        DELETE        FROM info        WHERE  id= #{age}    </delete>    <insert id="insert" parameterType="TestPojo">        INSERT INTO info        VALUES (#{id} ,#{name},#{age})    </insert>    <update id="update" parameterType="TestPojo">        update info        SET name=#{name},age=#{age} where id=#{id}    </update></mapper>
3.在你的工程目录的java包下面建几个文件夹,api、config、dao、domain、services

api:这里放controller,控制层

config:这里放配置的程序

dao:数据访问程序,model层

domain:放入实体类

services:这个放service

4.在api下面建TestController.java

@RestController

public class TestController {    @Autowired    //自动装备,可以创建的时候不用赋初值,自动赋值,我的初步理解    private TestServices testServices;    @RequestMapping("/sayhi")    public String sayhi(){        return "hello";    }    @RequestMapping(value = "/show")    //如果请求地址是/show,返回的函数如下    public String show(){        return testServices.show();    }    @RequestMapping(value = "/showDao")    //如果请求地址是showDao,调用的返回函数如下,地址对大小写敏    public Object showDao(int id){        //这里定义的 int age,是传给testServices.showDao的参数,名称自定义,        //地址中的参数名称由TestMapper.xml中定义        return testServices.showDao(id);    }    @RequestMapping(value = "/delete")    public void delete(int id){        testServices.delete(id);    }    @RequestMapping(value = "/insert",params={"id","name","age"} )    @ResponseBody    public void insert(@RequestParam("id") long id,                       @RequestParam("name") String name,                       @RequestParam("age") int age){        TestPOJO testPOJO = new TestPOJO();        testPOJO.setId(id);        testPOJO.setAge(age);        testPOJO.setName(name);        testServices.insert(testPOJO);    }    @RequestMapping(value = "/update",params={"id","name","age"} )    @ResponseBody    public void update(@RequestParam("id") long id,                       @RequestParam("name") String name,                       @RequestParam("age") int age){        TestPOJO testPOJO = new TestPOJO();        testPOJO.setId(id);        testPOJO.setAge(age);        testPOJO.setName(name);        testServices.update(testPOJO);    }}
5.dao文件夹下建立Mapper.java和TestDao.java
Mapper.java内容如下:
@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)@Documented@Componentpublic @interface Mapper {    String value() default "";}
TestDao.java内容如下:
@Mapperpublic interface TestDao {    List<TestPOJO> get(int age);    void delete(int id);    void insert(TestPOJO pojo);    void update(TestPOJO pojo);}
6.domain文件夹建立TestPOJO.java
public class TestPOJO {    private Long id;    private String name;    private int age;    public Long getId() {        return id;    }    public void setId(Long id) {        this.id = id;    }    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;    }}

7.services文件夹下建立TestServices.java
@Servicepublic class TestServices {    @Autowired    private TestDao testDao;    public String show(){        return "hello world,uni!";    }    //showDao方法,参数id是自己命名定义,不影响其他,返回类型是List的自定义testPOJO    //调用了testDao的get方法    public List<TestPOJO> showDao(int age){        return testDao.get(age);    }    public void delete(int age){        testDao.delete(age);    }    public void insert(TestPOJO pojo){        testDao.insert(pojo);    }    public void update(TestPOJO pojo){        testDao.update(pojo);    }}
8.在config下建立3个java文件,DataSourceConfig.java,MyBatisConfig.java,MyBatisMapperScannerConfig.java
DataSourceConfig:这个是读取配置文件中datasource信息的
MyBatisConfig:这个是读取Mapper.xml中信息的
MyBatisMapperScannerConfig:这个是给程序指定查找目录的
DataSourceConfig代码如下:
@Configurationpublic class DataSourceConfig {    @Bean    @ConfigurationProperties(prefix="spring.datasource")    public DataSource dataSource(){       return new DataSource();    }}

MyBatisConfig代码如下:
@Configurationpublic class MyBatisConfig implements TransactionManagementConfigurer {    @Autowired DataSource dataSource;    @Bean(name = "sqlSessionFactory")    public SqlSessionFactory sqlSessionFactoryBean() {        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();        bean.setDataSource(dataSource);        bean.setTypeAliasesPackage("com.hjf.boot.demo.boot_mybatis.domain");        //添加XML目录        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();        try {            bean.setMapperLocations(resolver.getResources("classpath:/mybatis/*Mapper.xml"));            return bean.getObject();        } catch (Exception e) {            e.printStackTrace();            throw new RuntimeException(e);        }    }    @Bean    public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {        return new SqlSessionTemplate(sqlSessionFactory);    }    @Bean    public PlatformTransactionManager annotationDrivenTransactionManager() {        return new DataSourceTransactionManager(dataSource);    }}
MyBatisMapperScannerConfig代码如下:
@Configuration@AutoConfigureAfter(MyBatisConfig.class)public class MyBatisMapperScannerConfig {    @Bean    public MapperScannerConfigurer mapperScannerConfigurer() {        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();        mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");        mapperScannerConfigurer.setBasePackage("com.hjf.boot.demo.boot_mybatis");        mapperScannerConfigurer.setAnnotationClass(Mapper.class);        return mapperScannerConfigurer;    }}

9.到这里所有的代码都写完了,应该可以运行了,但我之前在测试时,发现程序会包ibatis包里的方法引用不对,我百度了好久,有个网友说是依赖中的版本问题,我把我的pom.xml也放在这里
<?xml version="1.0" encoding="UTF-8"?><project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">  <modelVersion>4.0.0</modelVersion>  <groupId>org.springframework</groupId>  <artifactId>spring-tx</artifactId>  <version>4.2.6.RELEASE</version>  <name>Spring Transaction</name>  <description>Spring Transaction</description>  <url>https://github.com/spring-projects/spring-framework</url>  <organization>    <name>Spring IO</name>    <url>http://projects.spring.io/spring-framework</url>  </organization>  <licenses>    <license>      <name>The Apache Software License, Version 2.0</name>      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>      <distribution>repo</distribution>    </license>  </licenses>  <developers>    <developer>      <id>jhoeller</id>      <name>Juergen Hoeller</name>      <email>jhoeller@pivotal.io</email>    </developer>  </developers>  <scm>    <connection>scm:git:git://github.com/spring-projects/spring-framework</connection>    <developerConnection>scm:git:git://github.com/spring-projects/spring-framework</developerConnection>    <url>https://github.com/spring-projects/spring-framework</url>  </scm>  <issueManagement>    <system>Jira</system>    <url>https://jira.springsource.org/browse/SPR</url>  </issueManagement>  <dependencies>    <dependency>      <groupId>aopalliance</groupId>      <artifactId>aopalliance</artifactId>      <version>1.0</version>      <scope>compile</scope>      <optional>true</optional>    </dependency>    <dependency>      <groupId>com.ibm.websphere</groupId>      <artifactId>uow</artifactId>      <version>6.0.2.17</version>      <scope>compile</scope>      <optional>true</optional>    </dependency>    <dependency>      <groupId>javax.ejb</groupId>      <artifactId>ejb-api</artifactId>      <version>3.0</version>      <scope>compile</scope>      <optional>true</optional>    </dependency>    <dependency>      <groupId>javax.resource</groupId>      <artifactId>connector-api</artifactId>      <version>1.5</version>      <scope>compile</scope>      <optional>true</optional>    </dependency>    <dependency>      <groupId>javax.transaction</groupId>      <artifactId>javax.transaction-api</artifactId>      <version>1.2</version>      <scope>compile</scope>      <optional>true</optional>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-aop</artifactId>      <version>4.2.6.RELEASE</version>      <scope>compile</scope>      <optional>true</optional>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-beans</artifactId>      <version>4.2.6.RELEASE</version>      <scope>compile</scope>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-context</artifactId>      <version>4.2.6.RELEASE</version>      <scope>compile</scope>      <optional>true</optional>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-core</artifactId>      <version>4.2.6.RELEASE</version>      <scope>compile</scope>    </dependency>  </dependencies></project>
10.运行程序,这个startApp是我写的一个程序入口
程序启动中
程序启动完成
11.打开浏览器,输入地址栏
http://localhost:8082/show,显示hello界面
http://localhost:8082/showDao?id=1,显示查询结果
http://localhost:8082/delete?id=1  从数据库中删除,浏览器没有返回显示内容,需要从数据库中查询看结果

http://localhost:8082/insert?id=1&name=emli&age=3  从数据库中插入数据,浏览器没有返回显示内容,需要从数据库中查询看结果
http://localhost:8082/update?id=1&name=emliy&age=33  从数据库中更新id=1的数据,浏览器没有返回显示内容,需要从数据库中查询看结果











0 0