基本步骤
1、添加maven依赖
下面展示 pom.xml
。
// A code block
// An highlighted block
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.4</version>
</dependency>
<!-- 使用jdbc连接mysql的驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency>
2、配置mybatis-config.xml
下面展示 mybatis-config.xml
。
// A code block
// An highlighted block
<?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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url"
value="jdbc:mysql://127.0.0.1:3306/sdtest? useUnicode=true&characterEncoding=utf-8&useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/VideoMapper.xml"/> //VideoMapper.xml的路径
</mappers>
</configuration>
3、配置VideoMapper.xml
下面展示一些 VideoMapper.xml
。
// A code block
// An highlighted block
<?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">
<!-- namespace:名称空间,一般需要保持全局唯一,最好是和dao层的java接口一致
可以映射 sql 语句 到对应的方法名称和参数、返回类型
mybatis是使用接口动态代理
-->
<mapper namespace="net.xdclass.online_class.dao.VideoMapper">
<!--
statement sql
id: 当前mapper下需要唯一 与dao中方法名一致
resultType:sql查询结果集的封装
-->
<select id="selectId" resultType="net.xdclass.online_class.domain.Video"> //返回类型为Video
select * from video where id = #{video_id}
</select>
</mapper>
4、其它文件
下面展示 VideoMapper
。
// A code block
dao层 中的 VideoMapper
// An highlighted block
public interface VideoMapper {
/**
* 根据视频id查找视频对象
* @param videoId
* @return
*/
Video selectId(@Param("video_id") int videoId); //@Param()起别名 多个参数必须使用 不然会出错
}
@Param(“”)起别名 多个参数必须使用 不然会出错
下面展示Video类
。
// A code block
daomain中的Video类
// An highlighted block
/**
* 视频类
*/
public class Video {
/**
* 主键
*/
private int id;
/**
* 视频标题
*/
private String title;
/**
* 视频详情
*/
private String summary;
/**
* 视频封面图
*/
private String coverImg;
/**
* 价格
*/
private int price;
/**
* 创建时间
*/
private Date createTime;
/**
* 评分
*/
private Double point;
public String getSummary() {
return summary;
}
public void setSummary(String summary) {
this.summary = summary;
}
public String getCoverImg() {
return coverImg;
}
public void setCoverImg(String coverImg) {
this.coverImg = coverImg;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Double getPoint() {
return point;
}
public void setPoint(Double point) {
this.point = point;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
@Override
public String toString() {
return "Video{" +
"id=" + id +
", title='" + title + '\'' +
", summary='" + summary + '\'' +
", coverImg='" + coverImg + '\'' +
", price=" + price +
", createTime=" + createTime +
", point=" + point +
'}';
}
}
获取参数中的值:
注意:取java对象的某个值,属性名大小写要一致
#{value} :推荐使用,是java的名称
${value} : 不推荐使用,存在sql注入风险
5、SqlSession代码实战
下面展示一些 SqlSessionDemo.class
。
// A code block
var foo = 'bar';
// An highlighted block
public class SqlSessionDemo {
public static void main(String[] args) throws IOException {
String source = "config/mybatis-config.xml";
//读取配置文件
InputStream inputStream = Resources.getResourceAsStream(source);
//构建Session工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//获取Session
try (SqlSession sqlSession = sqlSessionFactory.openSession()){
VideoMapper videoMapper = sqlSession.getMapper(VideoMapper.class);
//通过xml读取
Video video = videoMapper.selectId(44);
// System.out.println(video);
//通过注解读取
List<Video> videoList = videoMapper.selectList();
// System.out.println(videoList.toString());
//通过xml读取
List<Video> videoList1 = videoMapper.selectListByXml();
System.out.println(videoList1.toString());
}
}
}
VideoMapper中添加如下代码:
// A code block
var foo = 'bar';
// An highlighted block
/**
*查询全部视频列表 xml
*/
List<Video> selectListByXml();
/**
* 查询全部视频列表 注解
*/
@Select("select * from video")
List<Video> selectList();
6、log4j打印日志
1、添加依赖
// A code block
// An highlighted block
<!-- 打印日志 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
</dependency>
2、在classpath中创建名称为log4j.properties文件
// A code block
var foo = 'bar';
// An highlighted block
log4j.rootLogger=ERROR, stdout
log4j.logger.工程路径=DEBUG #log4j.logger.net.test=
#trace内容会打印更多
#log4j.logger.net.xdclass=TRACE
#细化到打印某个mapper或其中某个方法
#log4j.logger.mapper路径.方法名=TRACE
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
7、Mybatis配置驼峰字段到Java
1、数据库字段是下划线,Java属性是驼峰,怎么查询映射上去
取别名
select cover_img as coverImg from video //不适合多字段
Mybatis自带配置(加在Mybatis配置文件顶部)
// mybatis查询时,发现下划线,自动将下划线后面的字母大写
// An highlighted block
<configuration>
<!-- 下划线自动映射驼峰字段 -->
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
下面展示一些 ``。
// A code block
在 properties 中配置
// An highlighted block
# mybatis 下划线转驼峰配置,两者都可以
#mybatis.configuration.mapUnderscoreToCamelCase=true
mybatis.configuration.map-underscore-to-camel-case=true
#配置扫描
mybatis.mapper-locations=classpath:mapper/*.xml
#配置xml的结果别名
mybatis.type-aliases-package=net.xdclass.online_xdclass.model.entity