Java 8+
springBoot2.5 +
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.6</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!--Druid starter--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.22</version> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.0</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3307/webapp1?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8 username: webapp1 password: webapp1 type: com.alibaba.druid.pool.DruidDataSource #Spring Boot 默认是不注入这些属性值的,需要自己绑定 #druid 数据源专有配置 # 初始化大小,最小,最大 initialSize: 5 minIdle: 5 maxActive: 200 # 配置获取连接等待超时的时间 maxWait: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 timeBetweenEvictionRunsMillis: 60000 # 配置一个连接在池中最小生存的时间,单位是毫秒 minEvictableIdleTimeMillis: 300000 # 用来检测连接是否有效的sql,要求是一个查询语句 validationQuery: SELECT 1 FROM DUAL # 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。 testWhileIdle: true # 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能 testOnBorrow: false # 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。 testOnReturn: false # 是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。 poolPreparedStatements: true # 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。 max-pool-prepared-statement-per-connection-size: 50 #配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入 #如果允许时报错 java.lang.ClassNotFoundException: org.apache.log4j.Priority #则导入 log4j 依赖即可,Maven 地址:https://mvnrepository.com/artifact/log4j/log4j filters: stat,wall,log4j # 合并多个DruidDataSource的监控数据 useGlobalDataSourceStat: true # 通过connectProperties属性来打开mergeSql功能;慢SQL记录 connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500 mybatis: #sql映射文件的位置 # mapper-locations: classpath:com/xiang/mapper/*.xml mapper-locations: classpath:mapper/*.xml #开启驼峰命名转化 configuration: map-underscore-to-camel-case: true #开启别名 type-aliases-package: com.xiang
package com.xiang.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.stereotype.Component; import java.util.Date; /** * Created by IntelliJ IDEA. * User: xiang * Date: 2021/10/17 23:52 */ @Component @Data @NoArgsConstructor @AllArgsConstructor public class User { private int id; private String username; private String age; private Date birthday; }
package com.xiang.mapper; import com.xiang.pojo.User; import org.apache.ibatis.annotations.Mapper; import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.ComponentScan; import org.springframework.stereotype.Repository; import java.util.List; /** * Created by IntelliJ IDEA. * User: xiang * Date: 2021/10/17 23:54 */ @Mapper @Repository public interface UserMapper { User findById(int id); 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="com.xiang.mapper.UserMapper"> <select id="findById" resultType="user"> select * from user where id = #{id} </select> <select id="findAll" resultType="user"> select * from user </select> </mapper>
package com.xiang.service; import com.xiang.pojo.User; import java.util.List; /** * Created by IntelliJ IDEA. * User: xiang * Date: 2021/10/18 15:01 */ public interface UserService { User findById(int id); List<User> findAll(); }
package com.xiang.service.impl; import com.xiang.mapper.UserMapper; import com.xiang.pojo.User; import com.xiang.service.UserService; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.ComponentScan; import org.springframework.stereotype.Service; import java.util.List; /** * Created by IntelliJ IDEA. * User: xiang * Date: 2021/10/18 15:02 */ @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public User findById(int id) { return userMapper.findById(id); } @Override public List<User> findAll() { return userMapper.findAll(); } }
package com.xiang; import com.alibaba.druid.pool.DruidDataSource; import com.xiang.pojo.User; import com.xiang.service.impl.UserServiceImpl; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; import java.sql.Connection; import java.sql.SQLException; import java.util.List; import java.util.Map; @SpringBootTest class SpringBootDatabaseApplicationTests { @Autowired UserServiceImpl userService; /*** * 根据id查 */ @Test public void findById(){ User user = userService.findById(1); System.out.println(user); } /** * 查所有 */ @Test public void findAll(){ System.out.println(userService.findAll()); System.out.println("/*******************************************/"); List<User> userList = userService.findAll(); for (User user : userList) { System.out.println(user); } } }
package com.xiang.controller; import com.xiang.pojo.User; import com.xiang.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; /** * Created by IntelliJ IDEA. * User: xiang * Date: 2021/10/18 22:03 */ @Controller public class UserController { @Autowired UserService userService; @RequestMapping("findById") @ResponseBody public String findById(@RequestParam("id") int id) { User byId = userService.findById(id); return byId.toString(); } }