@@ -20,19 +20,35 @@ | |||||
<properties> | <properties> | ||||
<mybatis.starter.version>1.3.1</mybatis.starter.version> | <mybatis.starter.version>1.3.1</mybatis.starter.version> | ||||
<druid.starter.version>1.1.5</druid.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> | </properties> | ||||
<dependencies> | <dependencies> | ||||
<!--mybatis--> | |||||
<dependency> | <dependency> | ||||
<groupId>org.mybatis.spring.boot</groupId> | <groupId>org.mybatis.spring.boot</groupId> | ||||
<artifactId>mybatis-spring-boot-starter</artifactId> | <artifactId>mybatis-spring-boot-starter</artifactId> | ||||
<version>${mybatis.starter.version}</version> | <version>${mybatis.starter.version}</version> | ||||
</dependency> | </dependency> | ||||
<!--druid--> | |||||
<dependency> | <dependency> | ||||
<groupId>com.alibaba</groupId> | <groupId>com.alibaba</groupId> | ||||
<artifactId>druid-spring-boot-starter</artifactId> | <artifactId>druid-spring-boot-starter</artifactId> | ||||
<version>${druid.starter.version}</version> | <version>${druid.starter.version}</version> | ||||
</dependency> | </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> | </dependencies> | ||||
<build> | <build> | ||||
@@ -1,9 +1,11 @@ | |||||
package com.xkcoding.springbootdemomybatis; | package com.xkcoding.springbootdemomybatis; | ||||
import org.mybatis.spring.annotation.MapperScan; | |||||
import org.springframework.boot.SpringApplication; | import org.springframework.boot.SpringApplication; | ||||
import org.springframework.boot.autoconfigure.SpringBootApplication; | import org.springframework.boot.autoconfigure.SpringBootApplication; | ||||
@SpringBootApplication | @SpringBootApplication | ||||
@MapperScan(basePackages = {"com.xkcoding.springbootdemomybatis.mapper"}) | |||||
public class SpringBootDemoMybatisApplication { | public class SpringBootDemoMybatisApplication { | ||||
public static void main(String[] args) { | 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 | context-path: /demo | ||||
spring: | spring: | ||||
datasource: | datasource: | ||||
# 启动时自动运行的 SQL 文件 | |||||
schema: classpath:init-sql/schema.sql | schema: classpath:init-sql/schema.sql | ||||
continue-on-error: true | continue-on-error: true | ||||
druid: | druid: | ||||
@@ -45,4 +46,19 @@ spring: | |||||
stat: | stat: | ||||
log-slow-sql: true | log-slow-sql: true | ||||
slow-sql-millis: 5000 | 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, | `tel` varchar(11) DEFAULT NULL, | ||||
`create_time` datetime DEFAULT NULL, | `create_time` datetime DEFAULT NULL, | ||||
PRIMARY KEY (`id`) | PRIMARY KEY (`id`) | ||||
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; | |||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8; | |||||
-- ---------------------------- | -- ---------------------------- | ||||
-- Records of boot_user | -- 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> |