SpringBoot+Mybatis整合(二)
说明:上篇文章搭建框架是基于注解开发的,很多公司为便于维护一般不采用这种方式,一般采用mapper.xml文件配置,这样可以更好的维护代码。接口我们搭建的框架都是基于mapper.xml文件配置的,首先我们搭建一下框架。
正题:只需要3步就完成框架搭建
首先说明一下工程目录结构:
1.配置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.0</modelVersion> <groupId>com.example</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>MySpringBoot</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <mybatis-spring-boot.version>1.2.0</mybatis-spring-boot.version> <mysql-connector.version>5.1.39</mysql-connector.version> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <!--mybatis依赖包--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>${mybatis-spring-boot.version}</version> </dependency> <!--mysql数据库依赖包--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql-connector.version}</version> </dependency> <!--lombok自动生成实体类中的getset方法--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.20</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
2.application.properties文件配置
server.port=9090 #视图层控制 用mvc方式访问templates下的HTML #访问后缀 spring.mvc.view.suffix=.html类似Springmvc中的视图文件夹 spring.mvc.view.prefix=classpath:/templates/ #访问后缀 spring.mvc.view.suffix=.html类似Springmvc中的.jsp spring.mvc.view.suffix=.html spring.mvc.static-path-pattern=/static/** #开发时关闭缓存,不然没法看到实时页面 spring.thymeleaf.cache=false #thymeleaf这样配置就可以直接访问static下的HTML(和mvc访问方式二选一) spring.thymeleaf.prefix = classpath:/static/ spring.thymeleaf.suffix = .html spring.datasource.url=jdbc:mysql://192.168.1.9:3306/test_demo_lqw?useUnicode=true&characterEncoding=utf8 spring.datasource.username=root spring.datasource.password=zp123456 spring.datasource.driver-class-name=com.mysql.jdbc.Driver #mybatis.typeAliasesPackage=com.example.demo.model mybatis.mapperLocations=classpath:mapper/*Mapper.xml #写法不同,不过结果一样 #mybatis.type-aliases-package=com.test.dailyreport.bean #mybatis.mapper-locations=classpath:mybatis/mapper/*Mapper.xml #验证连接的有效性 spring.datasource.primary.test-while-idle=true #获取连接时候验证,会影响性能 spring.datasource.primary.test-on-borrow=false #在连接归还到连接池时是否测试该连接 spring.datasource.primary.test-on-return=false spring.datasource.primary.validation-query=SELECT 1 FROM DUAL #空闲连接回收的时间间隔,与test-while-idle一起使用,设置5分钟 spring.datasource.primary.time-between-eviction-runs-millis=300000 #连接池空闲连接的有效时间 ,设置30分钟 spring.datasource.primary.min-evictable-idle-time-millis=1800000 spring.datasource.primary.initial-size=5 #指定连接池中最大的活跃连接数. spring.datasource.primary.max-active=50 #指定连接池等待连接返回的最大等待时间,毫秒单位. spring.datasource.primary.max-wait=60000 #指定必须保持连接的最小值 spring.datasource.primary.min-idle=5 #开启驼峰命名转换 mybatis.configuration.map-underscore-to-camel-case=true #sql打印控制台 logging.level.com.example.demo.mapper=debug
3.入口MySpringBootApplication.java文件
package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; //@MapperScan("com.example.demo.mapper") 在数据层配置@Mapper一个功能 @SpringBootApplication//(exclude = {DataSourceAutoConfiguration.class}) public class MySpringBootApplication { public static void main(String[] args) { SpringApplication.run(MySpringBootApplication.class, args); } }
到此我们的SpringBoot+Mybatis整合已经搭建完成。
接下来是Demo 演示了
控制层 TestController
package com.example.demo.controller; import com.example.demo.model.User; import com.example.demo.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.Map; /** * Created by 李庆伟 on 2018/7/24. */ @RestController public class TestController { @Autowired private UserService userService; @RequestMapping("/hello") public String hello (){ return "this is HelloWord"; } /** * 根据id获取user对象 * @return */ @RequestMapping("/getUserById") public User getUserById(){ String id = "0"; return userService.getUserById(id); } /** * 根据id获取Map对象 * @return */ @RequestMapping("/getUserMap") public Map<String,Object> getUserMap(){ String id = "0"; return userService.getUserMap(id); } /** * 添加方法 * @param * @return String */ @RequestMapping("/save") public String save (){ User user = new User(); user.setId("111"); user.setUserName("XXXX"); int num = userService.save(user); if(num == 1){ return "save sucess"; }else { return "save error"; } } /** * 修改方法 * @param * @return String */ @RequestMapping("/update") public String update (){ User user = new User(); user.setId("111"); user.setUserName("1111111"); int num = userService.update(user); if(num == 1){ return "update sucess"; }else { return "update error"; } } /** * 删除 * @param * @return String */ @RequestMapping("/delete") public String delete (){ User user = new User(); user.setId("111"); int num = userService.delete(user); if(num == 1){ return "delete sucess"; }else { return "delete error"; } } }
业务层接口UserService
package com.example.demo.service; import com.example.demo.model.User; import java.util.List; import java.util.Map; /** * Created by 李庆伟 on 2018/7/24. */ public interface UserService { /** * 通过id获取用户 * @return */ public User getUserById(String id); /** * 根据id获取Map对象 * @return */ public Map<String,Object> getUserMap(String id); /** * 添加方法 * @param user * @return */ public int save(User user); /** * 修改方法 * @param user * @return */ public int update(User user); /** * 删除 * @param user * @return */ public int delete(User user); }
业务层接口实现类UserServiceImpl
package com.example.demo.service.impl; import com.example.demo.mapper.UserMapper; import com.example.demo.model.User; import com.example.demo.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Map; /** * Created by 李庆伟 on 2018/7/24. */ @Service public class UserServiceImpl implements UserService{ @Autowired private UserMapper userMapper; /** * 通过id获取用户 * @return */ @Override public User getUserById(String id) { return userMapper.getUserById(id); } /** * 根据id获取Map对象 * @return */ public Map<String,Object> getUserMap(String id){ return userMapper.getUserMap(id); } /** * 添加方法 * @param user * @return */ public int save(User user){ return userMapper.save(user); } /** * 修改方法 * @param user * @return */ public int update(User user){ return userMapper.update(user); } /** * 删除 * @param user * @return */ @Transactional public int delete(User user){ /* User addUser = new User(); addUser.setId("3333"); addUser.setUserName("3333"); userMapper.save(addUser); int a = 1/0; */ return userMapper.delete(user); } }
数据层UserMapper
package com.example.demo.mapper; import com.example.demo.model.User; import org.apache.ibatis.annotations.*; import org.springframework.stereotype.Repository; import java.util.Map; /** * Created by 李庆伟 on 2018/7/24. */ @Repository @Mapper public interface UserMapper { /** * 通过查询能够直接映射到实体类中的属性是因为 配置了驼峰模式 * * @param id * @return */ public User getUserById(String id); /** * 不配置驼峰模式 * @param * @return */ /** * 返回map * * @param id * @return */ public Map<String, Object> getUserMap(String id); /** * 添加方法 * * @param user * @return */ int save(User user); /** * 修改方法 * * @param user * @return */ int update(User user); /** * 删除 * * @param user * @return */ int delete(User user); }
数据层UserMapper.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.2//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.example.demo.mapper.UserMapper"> <!-- 增加 --> <insert id="save"> INSERT INTO user_t( id, user_name ) VALUES ( #{id}, #{userName} ) </insert> <!-- 删除 --> <delete id="delete"> delete from user_t WHERE id =#{id} </delete> <!--修改--> <update id="update"> update user_t SET user_name=#{userName} WHERE id=#{id} </update> <!-- 查询 --> <select id="getUserById" resultType="com.example.demo.model.User"> select id,user_name from user_t where id = #{id} </select> <!-- map封装 --> <resultMap id="UserResultMap" type="map"> <id property="id" column="id" /> <result property="userName" column="user_name" /> </resultMap> <select id="getUserMap" resultMap="UserResultMap"> select id,user_name from user_t where id = #{id} </select> </mapper>
实体类User
package com.example.demo.model; import lombok.Data; /** * Created by 李庆伟 on 2018/7/24. */ @Data public class User { private String id; private String userName; }
数据库表user_t
到此Demo也完成了
每天进步一点点。。。。。