Springboot-Mybatis-入门
Mybatis
配置
pom文件
需要在pom中加入mybatis和jdbc的依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.2</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-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
application.yml
1、配置spring的数据源
注意 driver-class-name: com.mysql.cj.jdbc.Driver
#配置数据源信息
spring:
datasource:
url: jdbc:mysql://localhost:3306/zg_test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
password: 123456
username: root
driver-class-name: com.mysql.cj.jdbc.Driver
#com.mysql.jdbc.Driver是MySQL 5版本的。MySQL 5以上需要使用 com.mysql.cj.jdbc.Driver
2、配置mybatis信息
包扫描和别名的扫描包可以直接在application.yml中配置,对于setting等更多属性需要mybatis-config.xml
mybatis:
# 配置mybatis的resultType别名,默认是别名为小写
type-aliases-package: com.lexiaoyao.mybatisdemo.domain
# 配置扫描的xml文件位置
mapper-locations: classpath:mybatis/mapper/*.xml
# mybatis详细配置文件
config-location: classpath:mybatis/mybatis-config.xml
mybatis-config.xml配置
配置configuration,常用的包括日志,和别名等。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 日志信息,控制台输出-->
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<!-- 别名配置-->
<typeAliases>
<typeAlias alias="Integer" type="java.lang.Integer"/>
<typeAlias alias="Long" type="java.lang.Long"/>
<typeAlias alias="HashMap" type="java.util.HashMap"/>
<typeAlias alias="LinkedHashMap" type="java.util.LinkedHashMap"/>
<typeAlias alias="ArrayList" type="java.util.ArrayList"/>
<typeAlias alias="LinkedList" type="java.util.LinkedList"/>
</typeAliases>
</configuration>
接口扫描
需要在启动类上添加MapperScan注解
@SpringBootApplication
@MapperScan("com.lexiaoyao.mybatisdemo.mapper")
public class MybatisdemoApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisdemoApplication.class, args);
}
}
接口和mapper映射
mybatis采用一个接口对应一个mapper的方式映射。
接口
接口中只需要定义方法
/**
* Repository 添加防止mapper注入时飙红,但是不会影响程序运行
*/
@Repository
public interface UserMapper {
void insertUser(User user);
List<User> listAll();
}
mapper
以上接口对应的mapper为:
<?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.lexiaoyao.mybatisdemo.mapper.UserMapper">
<sql id="Base_Column_List">
id,name,age
</sql>
<insert id="insertUser" parameterType="user">
insert into user (name,age) values (#{name},#{age})
</insert>
<select id="listAll" resultType="user">
select
<include refid="Base_Column_List"/>
from user
</select>
</mapper>
接下来对重点的标签解释
mapper
mapper文件最外层标签
namespace为对应接口的路径
sql
替换sql,类似于指代重复的sql字段的变量,通过和
id设定id,在include中通过refid字段进行定位
insert
对应sql的新增操作
id为接口中的方法名,parameterType为返回的类型,这里的user是别名
select
对应sql查询操作
增删改查
java接口
note
在声明接口的时候,最好在方法里显示地表面变量在xml里的符号。
采用@Param注解
void deleteById(@Param("id") Integer id);
/**
* Repository 添加防止mapper注入时飙红,但是不会影响程序运行
*/
@Repository
public interface UserMapper {
void insertUser(User user);
List<User> listAll();
void update(User user);
void deleteById(@Param("id") Integer id);
}
mapper.xml
~~~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.lexiaoyao.mybatisdemo.mapper.UserMapper">
<sql id="Base_Column_List">
id,name,age
</sql>
<insert id="insertUser" parameterType="user">
insert into user (name,age) values (#{name},#{age})
</insert>
<select id="listAll" resultType="user">
select
<include refid="Base_Column_List"/>
from user
</select>
<update id="update" parameterType="user">
update user set name = #{name},age = #{age} where id = #{id}
</update>
<delete id="deleteById">
delete from user where id = #{id}
</delete>
</mapper>