spring boot 学习之路3( 集成mybatis )
来源:互联网 发布:mac系统删除照片 编辑:程序博客网 时间:2024/05/15 18:02
好了,现在让我们来搞一下与mybatis的整合吧,在整合过程中,我会把遇到的问题也说出来,希望可以让大家少走弯路!
首先,是在pom.xml中添加一些依赖
- 这里用到spring-boot-starter基础和spring-boot-starter-test用来做单元测试验证数据访问
- 引入连接mysql的必要依赖mysql-connector-java
- 引入整合MyBatis的核心依赖mybatis-spring-boot-starter
- 这里不引入spring-boot-starter-jdbc依赖,是由于mybatis-spring-boot-starter中已经包含了此依赖
pom.xml部分依赖如下:
<!--lombok用于实体类,生成有参无参构造等只需要一个@Data注解就行--> <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.10</version> <scope>provided</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.21</version> </dependency> <!--mybatis--> <!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.0</version> </dependency>
注意,在上面依赖中,我多加了一个lombok的依赖,与本应用没多大关系,不要也是可以的,不影响项目运行。具体作用是实体类上通过注解来替代get/set tosSring()等,具体用法参考lombok的简单介绍(1)
在application.properties
中配置mysql的连接配置:
1 spring.datasource.url=jdbc:mysql://127.0.0.1:3306/spring 2 spring.datasource.username=root 3 spring.datasource.password=123456 4 spring.datasource.driver-class-name=com.mysql.jdbc.Driver 5 spring.datasource.max-idle=10 6 spring.datasource.max-wait=10000 7 spring.datasource.min-idle=5 8 spring.datasource.initial-size=5 9 server.session.timeout=1010 server.tomcat.uri-encoding=UTF-811 #连接mybatis 和在springmvc中一致,要制定mybatis配置文件的路径 上面是连接jdbcTemplate 相当于连接jdbc12 # mybatis.config= classpath:mybatis-config.xml13 #mybatis.mapperLocations=classpath:mappers/*.xml14 15 #mybatis.mapper-locations=classpath*:mappers/*Mapper.xml16 #mybatis.type-aliases-package=com.huhy.web.entity17 18 spring.view.prefix=/WEB-INF/jsp/19 spring.view.suffix=.jsp20 21 #设置端口22 server.port=999923 #指定server绑定的地址24 server.address=localhost25 #设置项目访问根路径 不配置,默认为/26 server.context-path=/
上面这些配置具体什么意义我就在这不多解释了,这些配置好之后,就可以搞代码开发了。
首先创建一个User类:
1 package com.huhy.web.entity; 2 3 import lombok.AllArgsConstructor; 4 import lombok.Data; 5 import lombok.NoArgsConstructor; 6 7 /** 8 * Created by ${huhy} on 2017/8/5. 9 */10 @Data11 @NoArgsConstructor12 @AllArgsConstructor13 public class User {14 private String id;15 private String name;16 private int age;17 }
实体类中我用到的注解是来自lombok中的,添加上@Data, @NoArgsConstructor, @AllArgsConstructor这几个注解,和我们写出来那些get/set,有参无参,toString 是一样的
UserMapper接口
1 package com.huhy.web.mapper; 2 3 import com.huhy.web.entity.User; 4 import org.apache.ibatis.annotations.Insert; 5 import org.apache.ibatis.annotations.Mapper; 6 import org.apache.ibatis.annotations.Param; 7 import org.apache.ibatis.annotations.Select; 8 9 /**10 * @Author:{huhy}11 * @DATE:Created on/8/5 22:1912 * @Class Description:13 */14 @Mapper15 public interface UserMapper {16 /*17 * 通过id查询对应信息18 * */19 @Select("SELECT * FROM USER WHERE id = #{id}")20 User selectByPrimaryKey(String id);21 /*22 * 通过name 查询对应信息23 * */24 @Select("Select * from user where name = #{name} and id = #{id}")25 User selectByName(@Param("name") String name, @Param("id") String id);26 27 /**28 * @param id29 * @param name30 * @param age31 * @return32 */33 @Insert("INSERT INTO USER(id,NAME, AGE) VALUES(#{id},#{name}, #{age})")34 int insert(@Param("id") String id,@Param("name") String name, @Param("age") Integer age);35 }
在mapper通过注解编程写的,你也可以通过配置文件的形式,在.properties也有,只是被我注释了,现在统一用注解开发。
Service
1 package com.huhy.web.service.impl; 2 3 import com.huhy.web.entity.User; 4 import com.huhy.web.mapper.UserMapper; 5 import com.huhy.web.service.UserService; 6 import org.springframework.beans.factory.annotation.Autowired; 7 import org.springframework.stereotype.Service; 8 9 /**10 * @Author:{huhy}11 * @DATE:Created on 2017/8/5 22:1812 * @Class Description:13 */14 @Service15 public class UserServiceImpl implements UserService{16 17 @Autowired18 private UserMapper userMapper;19 20 @Override21 public User queryById(String id) {22 User user = userMapper.selectByPrimaryKey(id);23 return user;24 }25 26 public User queryByName(String name,String id){27 User user = userMapper.selectByName(name,id);28 return user;29 }30 }
注意:在这有个问题: 通过UserMapper 的类上有两种注解可以使用:@Mapper 和 @Repository (我从网上查了一下,没发现有太大的差别,而且用不用都可以。我在使用中的唯一区别就是 @Repository注解,在service进行自动注入不会报warn,而@Mapper会报warn ,不管怎样不影响程序的运行)
展示层(controller)
1 package com.huhy.web.controller; 2 3 import com.huhy.web.entity.User; 4 import com.huhy.web.service.UserService; 5 import org.springframework.beans.factory.annotation.Autowired; 6 import org.springframework.web.bind.annotation.PathVariable; 7 import org.springframework.web.bind.annotation.RequestMapping; 8 import org.springframework.web.bind.annotation.RestController; 9 10 /**11 * Created by ${huhy} on 2017/8/5.12 */13 14 15 @RestController16 public class JDBCController {17 /* @Autowired18 private JdbcTemplate jdbcTemplate;19 */20 @Autowired21 private UserService userService;22 23 /**24 * 测试数据库连接25 */26 /*@RequestMapping("/jdbc/getUsers")27 public List<Map<String, Object>> getDbType(){28 String sql = "select * from user";29 List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);30 for (Map<String, Object> map : list) {31 Set<Entry<String, Object>> entries = map.entrySet( );32 if(entries != null) {33 Iterator<Entry<String, Object>> iterator = entries.iterator( );34 while(iterator.hasNext( )) {35 Entry<String, Object> entry =(Entry<String, Object>) iterator.next( );36 Object key = entry.getKey( );37 Object value = entry.getValue();38 System.out.println(key+":"+value);39 }40 }41 }42 return list;43 }*/44 45 46 @RequestMapping("/jdbcTest/{id}")47 public User jdbcTest(@PathVariable("id") String id){48 return userService.queryById(id);49 }50 51 52 @RequestMapping("/jdbcTestName/{name}/{id}")53 public User queryByName(@PathVariable("name") String name,@PathVariable("id") String id){54 return userService.queryByName(name,id);55 }56 @RequestMapping("/name")57 public String getName(){58 return "huhy";59 }60 61 }
最后运行启动类就可以测试了:(在这有两中方式测试,第一种单独运行测试类,第二种就是junit测试)
第一种:启动类启动
package com;import org.mybatis.spring.annotation.MapperScan;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication@MapperScan("com.huhy.web.mapper")//扫描dao接口public class DemoApplication { /** * * @param 启动类 */ public static void main(String[] args) { SpringApplication.run(DemoApplication.class,args); }}
上面@MapperScan后面跟的是我的mapper文件的包名。
第二种启动方式:junit测试(注意注解@SpringBootTest)
1 package com.example.demo; 2 3 import com.DemoApplication; 4 import com.huhy.web.entity.User; 5 import com.huhy.web.mapper.UserMapper; 6 import org.junit.Test; 7 import org.junit.runner.RunWith; 8 import org.springframework.beans.factory.annotation.Autowired; 9 import org.springframework.boot.test.context.SpringBootTest;10 import org.springframework.test.annotation.Rollback;11 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;12 import org.springframework.test.context.web.WebAppConfiguration;13 14 @RunWith(SpringJUnit4ClassRunner.class) // SpringJUnit支持,由此引入Spring-Test框架支持!15 @SpringBootTest(classes = DemoApplication.class) // 指定我们SpringBoot工程的Application启动类16 @WebAppConfiguration // 由于是Web项目,Junit需要模拟ServletContext,因此我们需要给我们的测试类加上@WebAppConfiguration。17 public class DemoApplicationTests {18 @Autowired19 private UserMapper userMapper;20 @Test21 @Rollback22 public void findByName() throws Exception {23 userMapper.insert("17","def",123);24 User user = userMapper.selectByName("def","17");25 System.out.println(user);26 }27 }
注意 :@SpringBootTest注解是在1.4版本之后才有的,原来是SpringApplicationConfiguration。在使用junit测试时,具体看看你的sprin-boot-test的版本
如果你遇到SpringApplicationConfiguration 不能使用那就是以为 Spring Boot的SpringApplicationConfiguration注解在Spring Boot 1.4开始,被标记为Deprecated
- spring boot 学习之路3( 集成mybatis )
- IntelliJ IDEA Spring Boot学习(4) 集成mybatis
- spring boot 集成 mybatis 入门级学习
- Spring Boot 集成MyBatis
- Spring Boot 集成Mybatis
- spring-boot集成mybatis
- Spring boot集成Mybatis
- Spring Boot 集成MyBatis
- spring boot集成mybatis
- Spring Boot集成MyBatis
- Spring Boot 集成MyBatis
- Spring Boot 集成MyBatis
- Spring Boot 集成MyBatis
- Spring Boot 集成MyBatis
- Spring Boot集成mybatis
- Spring Boot集成Mybatis
- spring boot 集成mybatis
- Spring Boot 集成MyBatis
- ★会用这两键,你就是电脑高手了
- spring boot 学习之路2(注解介绍)
- Android学习笔记十四之RelativeLayout相对布局
- MyBatis Generator详解(转载)
- 十类经典office实用技巧
- spring boot 学习之路3( 集成mybatis )
- Socket简单入门例子
- 培训界最大的互联网企业【推荐】
- Linux关闭防火墙命令
- CCIE-交换路由复习笔记
- 【sum-root-to-leaf-numbers】
- linux安装nginx
- ★RFC标准库_目录链接
- linux安装nginx的常见错误解决(转载)