今天我们来分享一下操作数据库常用的ORM框架-mybatis,其实整理这篇文章是自己想写点内容进来,因为原来写的程序代码都放在了gitHub上面,自己之前写的文章大部分都是java的一些内容,没有涉及到框架的内容。
这样自己觉得可以帮助需要的人尽快入门一些框架基础吧。希望可以对需要的人有所帮助,避免找了好长时间是跑不起来的示例程序,费时费力不说,心情估计也是会受到一些影响,所以这篇文章就出现了。
首先自己使用的工具是idea,java版本是1.8的。好了我们开始我们的教程吧。首先你要会在idea上面建立一个web项目,不会的可以看下这篇文章java之JdbcTemplate入门教程,这篇文章可以帮你快速建立一个可以跑起来的web项目,希望可以帮助到你,接下来我们看下示例程序了。
首先,我们的pom文件的内容如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.wpw</groupId>
<artifactId>mybatis-sqlsession</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>mybatis-sqlsession</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
其实pom文件里面配置的都是我们环境需要依赖的jar包,这样我们的项目配置信息就配置好了一部分,接下来,我们需要配置一下连接mysql环境信息的配置。
在application.properties配置文件里面进行配置。
server.port=8080
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://自己mysql服务器ip地址:3306/mybatis?characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
##mybatis配置信息
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.type-aliases-package=com.wpw.mybatissqlsession
mybatis.configuration.map-underscore-to-camel-case=true
好了,环境信息大致上就是这些,接下来我们就开始提供我们的示例程序。
首先,一般web项目的请求流程就是controller接口层,service业务逻辑层,dao数据库层。
我们看下我们的controller层写的代码吧,主要是调用UserService接口提供的方法进行查询数据库的数据,由于本篇文章只是写了一下查询的用法,不涉及到其它的操作,因为在我看来,你会了查询就会了其它的操作。
package com.wpw.mybatissqlsession;
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @author 微信公众号~后端Coder
*/
@RestController
public class UserController {
private final UserService userService;
private final SqlSession sqlSession;
@Autowired
public UserController(UserService userService, SqlSession sqlSession) {
this.userService = userService;
this.sqlSession = sqlSession;
}
/**
* 获取集合数据User信息
*
* @return 返回集合User数据
*/
@GetMapping(value = "/findAll")
public List<User> findAll() {
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = userMapper.findAll();
if (!CollectionUtils.isEmpty(userList)){
for (User user:userList) {
System.out.println(user);
}
}
return userService.findAll();
}
@GetMapping(value = "/findAllUser")
public List<User> findAllUser() {
return userService.findAllUser();
}
}
然后我们继续看下我们的业务逻辑层接口提供的方法。
package com.wpw.mybatissqlsession;
import java.util.List;
public interface UserService {
/**
* 返回集合的数据
* @return 返回查询到的集合数据
*/
List<User> findAll();
/**
* 返回集合的数据
* @return 返回查询到的集合数据
*/
List<User> findAllUser();
}
一般我们定义一个接口都会使用一个实现类去实现这个接口,这样解耦合就非常明确了,希望这句话可以帮助到你。
package com.wpw.mybatissqlsession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
public class UserServiceImpl implements UserService{
@Resource
@Autowired
private UserMapper userMapper;
public UserServiceImpl(UserMapper userMapper) {
this.userMapper = userMapper;
}
@Override
public List<User> findAll() {
return userMapper.findAll();
}
@Override
public List<User> findAllUser() {
return userMapper.findAllUser();
}
}
上面的业务逻辑层基本上就结束了,接下来我们看下操作数据库数据的dao层,也就是UserMapper这个接口。
package com.wpw.mybatissqlsession;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author pc
*/
@Component
@Repository
@Mapper
public interface UserMapper {
/**
* 返回集合数据
*
* @return 返回集合User数据
*/
List<User> findAll();
@Select(value = "select * from user ")
@Results({
@Result(column = "id", property = "id"),
@Result(column = "username", property = "username"),
@Result(column = "password", property = "password")
})
List<User> findAllUser();
}
上面两个方法都是查询user表数据的内容,一个是基于注解的方式实现的,一个基于xml方式操作的,其实这两种方式是大部分企业常用的,但是自己喜欢注解这种方式,所以自己写了注解的方式提供给需要的人。
我们的UserMapper.xml放在的位置是在resoureces下面的,在resources文件下下面我们定义mapper文件夹,在mapper文件夹下面我们定义一个UserMapper.xml文件。
<?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.wpw.mybatissqlsession.UserMapper">
<select id="findAll" resultType="com.wpw.mybatissqlsession.User">
select * from user;
</select>
</mapper>
注意一点,我们定义的UserMapper.xml文件的名字要和上面的UserMapper接口的名字保持一致,这是需要注意的点。
UserMapper.xml文件的位置放置其实是随意的,但是你需要在上面连接mysql服务器配置里面进行相应的配置,不然会容易出现错误。也就是下面这段配置信息。
##mybatis配置信息
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.type-aliases-package=com.wpw.mybatissqlsession
mybatis.configuration.map-underscore-to-camel-case=true
上面的classpath路径值得就是resources文件下下的路径,这个需要注意。
好了,上面的内容就配置好了,到这还没结束,还有一个实体类定义,一个表结构信息。
package com.wpw.mybatissqlsession;
public class User {
private Long id;
private String username;
private String password;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
上面的是实体类的定义,下面的是需要的表结构定义语句。
create table user(
-> id int(11),
-> name varchar(32),
-> age int(3))engine=InnoDB;
到这里我们整个mybatis的流程就结束了,看下我们如何访问的接口的。
http://localhost:8080/findAllUser
http://localhost:8080/findAll
注意一点,你需要在自己的数据库表里面进行查询数据
今天分享的内容就到这里结束了,上面的代码配置好,就可以运行了。