1.MyBatis基础操作
前提准备:
1.准备数据库表
2.创建一个springboot工程,并引入对应的依赖,mybatis,mysql
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>x.x.x</version>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
3.设置数据库连接,在spring boot工程中,找到application.properties文件
#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库连接的url
#localhost为本地服务器默认地址,3306为数据库端口号,mybatis为连接数据库名称
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis
#连接数据库的用户名
spring.datasource.username=root
#连接数据库的密码
spring.datasource.password=1234
4.创建数据库中表对应的实体类,
5.准备Mapper接口类
@Mapper注解:表示当前接口为mybatis中的Mapper接口
程序运行时会自动创建接口的实现类对象(代理对象),并交给Spring的IOC容器管理
操作数据库
在Mapper的接口类中,编写方法实现功能,
方法一:直接在方法上使用注解来映射sql语句,
package org.mybatis.example;
public interface BlogMapper {
@Select("SELECT * FROM blog WHERE id = #{id}")
Blog selectBlog(int id);
}
其中利用#{...}将参数值传递给sql语句
#{...}和${...}都为Mybatis中的占位符,都可以实现参数传递,
区别:
#{}是
sql 的参数占位符,MyBatis 会将 sql 中的#{}
替换为? 号,按序给 sql 的? 号占位符设置参数值,${}
它可以用于标签属性值和 sql 内部,在sql语句中做字段拼接,存在sql注入问题,
方法二:利用xml文件来映射语句,
规范:
-
XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名)
-
XML映射文件的namespace属性为Mapper接口全限定名一致
-
XML映射文件中sql语句的id与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="org.mybatis.example.BlogMapper">
<select id="selectBlog" resultType="Blog">
select * from Blog where id = #{id}
</select>
</mapper>
在xml文件中,可以使用动态SQL,随着输入条件的不同,SQL语句发生变化,
<if>标签用于判断条件是否成立成立则拼接其中
<if test="条件表达式">
sql语句
</if>
<where>标签作用,1.如果其中没有条件成立,则去掉where;
2.如果where后第一个条件有and或or,去掉and或or
<where>
sql语句
</where>
<set>标签作用,去掉最后一个语句后面的逗号
<set>
sql语句
</set>
<foreach>作用,遍历方法中传递的参数集合
<foreach collection="集合名称" item="集合遍历出来的元素/项"
separator="每一次遍历使用的分隔符"
open="遍历开始前拼接的片段" close="遍历结束后拼接的片段">
</foreach>
<sql id="片段名称">:定义可重用的SQL片段
<include refid="片段名称">:通过属性refid,指定包含的SQL片段
两种方式的使用场景:
使用注解来映射简单语句会使代码显得更加简洁,但对于稍微复杂一点的语句,Java 注解不仅力不从心,还会让你本就复杂的 SQL 语句更加混乱不堪。 因此,如果你需要做一些很复杂的操作,最好用 XML 来映射语句。
选择何种方式来配置映射,以及认为是否应该要统一映射语句定义的形式,完全取决于你和你的团队。 换句话说,永远不要拘泥于一种方式,你可以很轻松的在基于注解和 XML 的语句映射方式间自由移植和切换。
2.application.properties文件中的其他操作
日志输出
mybatis.configuration.log-impl是MyBatis中用于配置日志输出方式的属性,该属性可以用来设置MyBatis输出SQL日志信息的方式,包括输出到控制台,输出到文件,输出到数据库等;
mybatis.configuration.log-impl=stdout.StdOutImpl 输出到控制台
开启驼峰命名
作用,如果字段名与属性名符合驼峰命名规则,mybatis会自动通过驼峰命名规则映射
mybatis.configuration.map-underscore-to-camel-case=true