@@ -20,19 +20,35 @@ | |||
<properties> | |||
<mybatis.starter.version>1.3.1</mybatis.starter.version> | |||
<druid.starter.version>1.1.5</druid.starter.version> | |||
<mapper.version>1.1.1</mapper.version> | |||
<pagehelper.version>1.1.0</pagehelper.version> | |||
</properties> | |||
<dependencies> | |||
<!--mybatis--> | |||
<dependency> | |||
<groupId>org.mybatis.spring.boot</groupId> | |||
<artifactId>mybatis-spring-boot-starter</artifactId> | |||
<version>${mybatis.starter.version}</version> | |||
</dependency> | |||
<!--druid--> | |||
<dependency> | |||
<groupId>com.alibaba</groupId> | |||
<artifactId>druid-spring-boot-starter</artifactId> | |||
<version>${druid.starter.version}</version> | |||
</dependency> | |||
<!--通用 Mapper--> | |||
<dependency> | |||
<groupId>tk.mybatis</groupId> | |||
<artifactId>mapper-spring-boot-starter</artifactId> | |||
<version>${mapper.version}</version> | |||
</dependency> | |||
<!--PageHelper--> | |||
<dependency> | |||
<groupId>com.github.pagehelper</groupId> | |||
<artifactId>pagehelper-spring-boot-starter</artifactId> | |||
<version>${pagehelper.version}</version> | |||
</dependency> | |||
</dependencies> | |||
<build> | |||
@@ -1,9 +1,11 @@ | |||
package com.xkcoding.springbootdemomybatis; | |||
import org.mybatis.spring.annotation.MapperScan; | |||
import org.springframework.boot.SpringApplication; | |||
import org.springframework.boot.autoconfigure.SpringBootApplication; | |||
@SpringBootApplication | |||
@MapperScan(basePackages = {"com.xkcoding.springbootdemomybatis.mapper"}) | |||
public class SpringBootDemoMybatisApplication { | |||
public static void main(String[] args) { | |||
@@ -0,0 +1,80 @@ | |||
package com.xkcoding.springbootdemomybatis.controller; | |||
import com.google.common.collect.Lists; | |||
import com.xkcoding.springbootdemomybatis.model.MybatisUser; | |||
import com.xkcoding.springbootdemomybatis.service.impl.MybatisUserServiceImpl; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.web.bind.annotation.*; | |||
import java.util.ArrayList; | |||
import java.util.Date; | |||
import java.util.List; | |||
@RestController | |||
@RequestMapping("/user") | |||
public class MybatisUserController { | |||
@Autowired | |||
private MybatisUserServiceImpl mybatisUserService; | |||
@GetMapping("/save") | |||
public MybatisUser save() { | |||
MybatisUser mybatisUser = new MybatisUser(); | |||
mybatisUser.setName("xkcoding"); | |||
mybatisUser.setTel("18600000000"); | |||
mybatisUser.setCreateTime(new Date()); | |||
return mybatisUserService.save(mybatisUser); | |||
} | |||
@GetMapping("/saveList") | |||
public Integer saveList() { | |||
ArrayList<MybatisUser> userList = Lists.newArrayList(); | |||
for (int i = 0; i < 20; i++) { | |||
MybatisUser mybatisUser = new MybatisUser(); | |||
mybatisUser.setName("xkcoding" + i); | |||
mybatisUser.setTel("186111111" + ((i < 10) ? ("0" + i) : i)); | |||
mybatisUser.setCreateTime(new Date()); | |||
userList.add(mybatisUser); | |||
} | |||
return mybatisUserService.saveList(userList); | |||
} | |||
@GetMapping("/update") | |||
public MybatisUser update() { | |||
MybatisUser mybatisUser = new MybatisUser(); | |||
mybatisUser.setId(2L); | |||
mybatisUser.setName(" 修改后的名字 "); | |||
mybatisUserService.update(mybatisUser); | |||
return mybatisUserService.update(mybatisUser); | |||
} | |||
@GetMapping("/delete") | |||
public MybatisUser delete() { | |||
MybatisUser mybatisUser = new MybatisUser(); | |||
mybatisUser.setId(1L); | |||
mybatisUserService.delete(mybatisUser); | |||
return mybatisUserService.findById(1L); | |||
} | |||
@GetMapping("/find/{id}") | |||
public MybatisUser findById(@PathVariable Long id) { | |||
return mybatisUserService.findById(id); | |||
} | |||
@GetMapping("/find") | |||
public MybatisUser findByName(@RequestParam String name) { | |||
return mybatisUserService.findByName(name); | |||
} | |||
@GetMapping({"", "/"}) | |||
public List<MybatisUser> findAll() { | |||
return mybatisUserService.findAll(); | |||
} | |||
@GetMapping("/page") | |||
public List<MybatisUser> findByPage(@RequestParam(defaultValue = "1") Integer pageNum, @RequestParam(defaultValue = "5") Integer pageSize) { | |||
return mybatisUserService.findMybatisUserByPage(pageNum, pageSize); | |||
} | |||
} |
@@ -0,0 +1,11 @@ | |||
package com.xkcoding.springbootdemomybatis.mapper; | |||
import com.xkcoding.springbootdemomybatis.model.MybatisUser; | |||
import com.xkcoding.springbootdemomybatis.utils.MyMapper; | |||
import org.apache.ibatis.annotations.Param; | |||
import org.springframework.stereotype.Component; | |||
@Component | |||
public interface MybatisUserMapper extends MyMapper<MybatisUser> { | |||
MybatisUser findByName(@Param("name") String name); | |||
} |
@@ -0,0 +1,27 @@ | |||
package com.xkcoding.springbootdemomybatis.model; | |||
import lombok.*; | |||
import javax.persistence.*; | |||
import java.util.Date; | |||
@Getter | |||
@Setter | |||
@NoArgsConstructor | |||
@AllArgsConstructor | |||
@ToString | |||
@Table(name = "mybatis_user") | |||
public class MybatisUser { | |||
@Id | |||
@GeneratedValue(strategy = GenerationType.IDENTITY,generator = "JDBC") | |||
private Long id; | |||
@Column(name = "name") | |||
private String name; | |||
@Column(name = "tel") | |||
private String tel; | |||
@Column(name = "create_time") | |||
private Date createTime; | |||
} |
@@ -0,0 +1,23 @@ | |||
package com.xkcoding.springbootdemomybatis.service; | |||
import com.xkcoding.springbootdemomybatis.model.MybatisUser; | |||
import java.util.List; | |||
public interface MybatisUserService { | |||
MybatisUser save(MybatisUser user); | |||
Integer saveList(List<MybatisUser> userList); | |||
MybatisUser update(MybatisUser user); | |||
Integer delete(MybatisUser user); | |||
MybatisUser findById(Long id); | |||
MybatisUser findByName(String name); | |||
List<MybatisUser> findAll(); | |||
List<MybatisUser> findMybatisUserByPage(Integer pageNum, Integer pageSize); | |||
} |
@@ -0,0 +1,68 @@ | |||
package com.xkcoding.springbootdemomybatis.service.impl; | |||
import com.github.pagehelper.PageHelper; | |||
import com.xiaoleilu.hutool.util.PageUtil; | |||
import com.xkcoding.springbootdemomybatis.mapper.MybatisUserMapper; | |||
import com.xkcoding.springbootdemomybatis.model.MybatisUser; | |||
import com.xkcoding.springbootdemomybatis.service.MybatisUserService; | |||
import lombok.extern.slf4j.Slf4j; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.stereotype.Service; | |||
import java.util.List; | |||
@Service | |||
@Slf4j | |||
public class MybatisUserServiceImpl implements MybatisUserService { | |||
@Autowired | |||
private MybatisUserMapper mybatisUserMapper; | |||
@Override | |||
public MybatisUser save(MybatisUser user) { | |||
mybatisUserMapper.insertUseGeneratedKeys(user); | |||
return user; | |||
} | |||
@Override | |||
public Integer saveList(List<MybatisUser> userList) { | |||
return mybatisUserMapper.insertList(userList); | |||
} | |||
@Override | |||
public MybatisUser update(MybatisUser user) { | |||
int i = mybatisUserMapper.updateByPrimaryKeySelective(user); | |||
if (i > 0) { | |||
log.info("【MybatisUserService】更新成功:{}条目", i); | |||
} else { | |||
log.error("【MybatisUserService】更新失败:{}", user); | |||
} | |||
return mybatisUserMapper.selectByPrimaryKey(user.getId()); | |||
} | |||
@Override | |||
public Integer delete(MybatisUser user) { | |||
return mybatisUserMapper.deleteByPrimaryKey(user); | |||
} | |||
@Override | |||
public MybatisUser findById(Long id) { | |||
return mybatisUserMapper.selectByPrimaryKey(id); | |||
} | |||
@Override | |||
public MybatisUser findByName(String name) { | |||
return mybatisUserMapper.findByName(name); | |||
} | |||
@Override | |||
public List<MybatisUser> findAll() { | |||
return mybatisUserMapper.selectAll(); | |||
} | |||
@Override | |||
public List<MybatisUser> findMybatisUserByPage(Integer pageNum, Integer pageSize) { | |||
PageHelper.startPage(pageNum, pageSize); | |||
return mybatisUserMapper.selectAll(); | |||
} | |||
} |
@@ -0,0 +1,7 @@ | |||
package com.xkcoding.springbootdemomybatis.utils; | |||
import tk.mybatis.mapper.common.Mapper; | |||
import tk.mybatis.mapper.common.MySqlMapper; | |||
public interface MyMapper<T> extends Mapper<T>, MySqlMapper<T> { | |||
} |
@@ -3,6 +3,7 @@ server: | |||
context-path: /demo | |||
spring: | |||
datasource: | |||
# 启动时自动运行的 SQL 文件 | |||
schema: classpath:init-sql/schema.sql | |||
continue-on-error: true | |||
druid: | |||
@@ -45,4 +46,19 @@ spring: | |||
stat: | |||
log-slow-sql: true | |||
slow-sql-millis: 5000 | |||
merge-sql: true | |||
merge-sql: true | |||
#mybatis 配置 | |||
mybatis: | |||
type-aliases-package: com.xkcoding.springbootdemomybatis.model | |||
mapper-locations: classpath:mapper/*.xml | |||
#通用 Mapper 配置 | |||
mapper: | |||
not-empty: false | |||
identity: MYSQL | |||
mappers: com.xkcoding.springbootdemomybatis.utils.MyMapper | |||
#PageHelper 配置 | |||
pagehelper: | |||
helper-dialect: mysql | |||
reasonable: true | |||
support-methods-arguments: true | |||
params: count=countSql |
@@ -10,10 +10,10 @@ CREATE TABLE `mybatis_user` ( | |||
`tel` varchar(11) DEFAULT NULL, | |||
`create_time` datetime DEFAULT NULL, | |||
PRIMARY KEY (`id`) | |||
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; | |||
) ENGINE=InnoDB DEFAULT CHARSET=utf8; | |||
-- ---------------------------- | |||
-- Records of boot_user | |||
-- ---------------------------- | |||
INSERT INTO `mybatis_user` VALUES ('1', 'klay', '13799008800', '2016-06-27 00:01:39'); | |||
INSERT INTO `mybatis_user` VALUES ('2', 'Tome', '18988991234', '2016-06-27 00:35:28'); | |||
INSERT INTO `mybatis_user` VALUES (1, 'klay', '13799008800', '2017-11-13 16:04:39'); | |||
INSERT INTO `mybatis_user` VALUES (2, 'Tome', '18988991234', '2017-11-13 16:13:28'); |
@@ -0,0 +1,51 @@ | |||
<?xml version="1.0" encoding="utf-8" ?> | |||
<configuration> | |||
<conversionRule conversionWord="clr" | |||
converterClass="org.springframework.boot.logging.logback.ColorConverter"/> | |||
<conversionRule conversionWord="wex" | |||
converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/> | |||
<conversionRule conversionWord="wEx" | |||
converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/> | |||
<appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender"> | |||
<layout class="ch.qos.logback.classic.PatternLayout"> | |||
<pattern>【xkcoding】%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx} | |||
</pattern> | |||
</layout> | |||
</appender> | |||
<appender name="fileLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> | |||
<!--滚动策略--> | |||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> | |||
<!--输出路径--> | |||
<fileNamePattern>${user.dir}/logs/log/mybatis-demo.%d.log</fileNamePattern> | |||
</rollingPolicy> | |||
<encoder> | |||
<pattern>【xkcoding】%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{36} - %msg%n</pattern> | |||
</encoder> | |||
</appender> | |||
<appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> | |||
<filter class="ch.qos.logback.classic.filter.LevelFilter"> | |||
<level>ERROR</level> | |||
<onMatch>ACCEPT</onMatch> | |||
<onMismatch>DENY</onMismatch> | |||
</filter> | |||
<!--滚动策略--> | |||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> | |||
<!--输出路径--> | |||
<fileNamePattern>${user.dir}/logs/error/mybatis-demo.%d.error</fileNamePattern> | |||
</rollingPolicy> | |||
<encoder> | |||
<pattern>【xkcoding】%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{36} - %msg%n</pattern> | |||
</encoder> | |||
</appender> | |||
<logger name="com.xkcoding.springbootdemomybatis.mapper" level="TRACE"/> | |||
<root level="info"> | |||
<appender-ref ref="consoleLog"/> | |||
<appender-ref ref="fileLog"/> | |||
<appender-ref ref="fileErrorLog"/> | |||
</root> | |||
</configuration> |
@@ -0,0 +1,16 @@ | |||
<?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.xkcoding.springbootdemomybatis.mapper.MybatisUserMapper"> | |||
<resultMap id="mybatisUserMap" type="com.xkcoding.springbootdemomybatis.model.MybatisUser"> | |||
<id property="id" column="id"/> | |||
<result property="name" column="name"/> | |||
<result property="tel" column="tel"/> | |||
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/> | |||
</resultMap> | |||
<select id="findByName" resultMap="mybatisUserMap"> | |||
SELECT * FROM mybatis_user WHERE name LIKE #{name} | |||
</select> | |||
</mapper> |