diff --git a/spring-boot-demo-mybatis/pom.xml b/spring-boot-demo-mybatis/pom.xml index 1104a81..1bc0e61 100644 --- a/spring-boot-demo-mybatis/pom.xml +++ b/spring-boot-demo-mybatis/pom.xml @@ -20,19 +20,35 @@ 1.3.1 1.1.5 + 1.1.1 + 1.1.0 + org.mybatis.spring.boot mybatis-spring-boot-starter ${mybatis.starter.version} + com.alibaba druid-spring-boot-starter ${druid.starter.version} + + + tk.mybatis + mapper-spring-boot-starter + ${mapper.version} + + + + com.github.pagehelper + pagehelper-spring-boot-starter + ${pagehelper.version} + diff --git a/spring-boot-demo-mybatis/src/main/java/com/xkcoding/springbootdemomybatis/SpringBootDemoMybatisApplication.java b/spring-boot-demo-mybatis/src/main/java/com/xkcoding/springbootdemomybatis/SpringBootDemoMybatisApplication.java index cfa979e..6edeba6 100644 --- a/spring-boot-demo-mybatis/src/main/java/com/xkcoding/springbootdemomybatis/SpringBootDemoMybatisApplication.java +++ b/spring-boot-demo-mybatis/src/main/java/com/xkcoding/springbootdemomybatis/SpringBootDemoMybatisApplication.java @@ -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) { diff --git a/spring-boot-demo-mybatis/src/main/java/com/xkcoding/springbootdemomybatis/controller/MybatisUserController.java b/spring-boot-demo-mybatis/src/main/java/com/xkcoding/springbootdemomybatis/controller/MybatisUserController.java new file mode 100644 index 0000000..25ae8a2 --- /dev/null +++ b/spring-boot-demo-mybatis/src/main/java/com/xkcoding/springbootdemomybatis/controller/MybatisUserController.java @@ -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 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 findAll() { + return mybatisUserService.findAll(); + } + + @GetMapping("/page") + public List findByPage(@RequestParam(defaultValue = "1") Integer pageNum, @RequestParam(defaultValue = "5") Integer pageSize) { + return mybatisUserService.findMybatisUserByPage(pageNum, pageSize); + } +} diff --git a/spring-boot-demo-mybatis/src/main/java/com/xkcoding/springbootdemomybatis/mapper/MybatisUserMapper.java b/spring-boot-demo-mybatis/src/main/java/com/xkcoding/springbootdemomybatis/mapper/MybatisUserMapper.java new file mode 100644 index 0000000..a07bf10 --- /dev/null +++ b/spring-boot-demo-mybatis/src/main/java/com/xkcoding/springbootdemomybatis/mapper/MybatisUserMapper.java @@ -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 findByName(@Param("name") String name); +} diff --git a/spring-boot-demo-mybatis/src/main/java/com/xkcoding/springbootdemomybatis/model/MybatisUser.java b/spring-boot-demo-mybatis/src/main/java/com/xkcoding/springbootdemomybatis/model/MybatisUser.java new file mode 100644 index 0000000..d0e19e0 --- /dev/null +++ b/spring-boot-demo-mybatis/src/main/java/com/xkcoding/springbootdemomybatis/model/MybatisUser.java @@ -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; +} diff --git a/spring-boot-demo-mybatis/src/main/java/com/xkcoding/springbootdemomybatis/service/MybatisUserService.java b/spring-boot-demo-mybatis/src/main/java/com/xkcoding/springbootdemomybatis/service/MybatisUserService.java new file mode 100644 index 0000000..cebbd98 --- /dev/null +++ b/spring-boot-demo-mybatis/src/main/java/com/xkcoding/springbootdemomybatis/service/MybatisUserService.java @@ -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 userList); + + MybatisUser update(MybatisUser user); + + Integer delete(MybatisUser user); + + MybatisUser findById(Long id); + + MybatisUser findByName(String name); + + List findAll(); + + List findMybatisUserByPage(Integer pageNum, Integer pageSize); +} diff --git a/spring-boot-demo-mybatis/src/main/java/com/xkcoding/springbootdemomybatis/service/impl/MybatisUserServiceImpl.java b/spring-boot-demo-mybatis/src/main/java/com/xkcoding/springbootdemomybatis/service/impl/MybatisUserServiceImpl.java new file mode 100644 index 0000000..7282e6e --- /dev/null +++ b/spring-boot-demo-mybatis/src/main/java/com/xkcoding/springbootdemomybatis/service/impl/MybatisUserServiceImpl.java @@ -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 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 findAll() { + return mybatisUserMapper.selectAll(); + } + + @Override + public List findMybatisUserByPage(Integer pageNum, Integer pageSize) { + PageHelper.startPage(pageNum, pageSize); + return mybatisUserMapper.selectAll(); + } +} diff --git a/spring-boot-demo-mybatis/src/main/java/com/xkcoding/springbootdemomybatis/utils/MyMapper.java b/spring-boot-demo-mybatis/src/main/java/com/xkcoding/springbootdemomybatis/utils/MyMapper.java new file mode 100644 index 0000000..8fea828 --- /dev/null +++ b/spring-boot-demo-mybatis/src/main/java/com/xkcoding/springbootdemomybatis/utils/MyMapper.java @@ -0,0 +1,7 @@ +package com.xkcoding.springbootdemomybatis.utils; + +import tk.mybatis.mapper.common.Mapper; +import tk.mybatis.mapper.common.MySqlMapper; + +public interface MyMapper extends Mapper, MySqlMapper { +} diff --git a/spring-boot-demo-mybatis/src/main/resources/application.yml b/spring-boot-demo-mybatis/src/main/resources/application.yml index 3aa2478..d2c9878 100644 --- a/spring-boot-demo-mybatis/src/main/resources/application.yml +++ b/spring-boot-demo-mybatis/src/main/resources/application.yml @@ -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 \ No newline at end of file + 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 \ No newline at end of file diff --git a/spring-boot-demo-mybatis/src/main/resources/init-sql/schema.sql b/spring-boot-demo-mybatis/src/main/resources/init-sql/schema.sql index 568908d..0ddc300 100644 --- a/spring-boot-demo-mybatis/src/main/resources/init-sql/schema.sql +++ b/spring-boot-demo-mybatis/src/main/resources/init-sql/schema.sql @@ -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'); diff --git a/spring-boot-demo-mybatis/src/main/resources/logback-spring.xml b/spring-boot-demo-mybatis/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..1a28f34 --- /dev/null +++ b/spring-boot-demo-mybatis/src/main/resources/logback-spring.xml @@ -0,0 +1,51 @@ + + + + + + + + + 【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} + + + + + + + + + ${user.dir}/logs/log/mybatis-demo.%d.log + + + 【xkcoding】%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{36} - %msg%n + + + + + + ERROR + ACCEPT + DENY + + + + + ${user.dir}/logs/error/mybatis-demo.%d.error + + + 【xkcoding】%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{36} - %msg%n + + + + + + + + + + + \ No newline at end of file diff --git a/spring-boot-demo-mybatis/src/main/resources/mapper/MybatisUserMapper.xml b/spring-boot-demo-mybatis/src/main/resources/mapper/MybatisUserMapper.xml new file mode 100644 index 0000000..c8c09c5 --- /dev/null +++ b/spring-boot-demo-mybatis/src/main/resources/mapper/MybatisUserMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + \ No newline at end of file