在Maven中使用mybatis
前提:建立数据库表:
我的是course表
1 创建maven项目
2 在pom文件中添加如下依赖
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency>
<!-- junit单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.30</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
</dependencies>
3在resource下编写xml文件
Logback.xml:logback配置文件(与日志有关可有可无)
代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,比如: 如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文档如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文档是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="10 seconds" debug="false">
<!-- 尽量别用绝对路径,如果带参数不同容器路径解释可能不同,以下配置参数在pom.xml里 -->
<!-- 日志级别 -->
<property name="log.root.level" value="info"/>
<!-- 其他日志级别 -->
<property name="log.other.level" value="info"/>
<!-- 日志路径,这里是相对路径,web项目eclipse下会输出到eclipse的安装目录下,如果部署到linux上的tomcat下,会输出到tomcat/bin目录 下 -->
<property name="log.base" value="logs"/>
<!-- 模块名称, 影响日志配置名,日志文件名 -->
<property name="log.moduleName" value="2020-edge-barnacle-application"/>
<!-- 日志文件大小 -->
<property name="log.max.size" value="500MB"/>
<!-- 定义日志输出格式-->
<property name="log.pattern"
value="%date{ISO8601} %-1level [%thread] %logger{56}.%method:%L -%msg%n"/>
<property name="log.charset" value="UTF-8"/>
<!--控制台输出 -->
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<!-- 用来定义日志的格式 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${log.pattern}</pattern>
<charset>${log.charset}</charset>
</encoder>
</appender>
<!-- 日志文件输出 -->
<appender name="infoFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 设置日志不超过${log.max.size}时的保存路径,注意如果 是web项目会保存到Tomcat的bin目录 下 -->
<file>${log.base}/info/${log.moduleName}_info.log</file>
<!-- 日志输出的文件的格式 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread]%logger{56}.%method:%L -%msg%n</pattern>
<charset>${log.charset}</charset>
</encoder>
<!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--按天回滚-->
<fileNamePattern>${log.base}/info/archive/${log.moduleName}_info_%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
<!--日志最大存储天数-->
<maxHistory>60</maxHistory>
<!-- 当天的日志大小 超过${log.max.size}时,压缩日志并保存 -->
<maxFileSize>${log.max.size}</maxFileSize>
</rollingPolicy>
<!--过滤器,只记录INFO级别的日志-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 日志文件输出 -->
<appender name="warnFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 设置日志不超过${log.max.size}时的保存路径,注意如果 是web项目会保存到Tomcat的bin目录 下 -->
<file>${log.base}/warn/${log.moduleName}_warn.log</file>
<!-- 日志输出的文件的格式 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread]%logger{56}.%method:%L -%msg%n</pattern>
</encoder>
<!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.base}/warn/archive/${log.moduleName}_warn_%d{yyyy-MM-dd}.%i.log.zip
</fileNamePattern>
<!--日志最大存储天数-->
<maxHistory>60</maxHistory>
<!-- 当天的日志大小 超过${log.max.size}时,压缩日志并保存 -->
<maxFileSize>${log.max.size}</maxFileSize>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 日志文件输出 -->
<appender name="errorFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 设置日志不超过${log.max.size}时的保存路径,注意如果 是web项目会保存到Tomcat的bin目录 下 -->
<file>${log.base}/error/${log.moduleName}_error.log</file>
<!-- 日志输出的文件的格式 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread]%logger{56}.%method:%L -%msg%n</pattern>
</encoder>
<!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.base}/error/archive/${log.moduleName}_error_%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
<!--日志最大存储天数-->
<maxHistory>60</maxHistory>
<!-- 当天的日志大小 超过${log.max.size}时,压缩日志并保存 -->
<maxFileSize>${log.max.size}</maxFileSize>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 为某个包下的所有类的指定Appender 这里也可以指定类名称例如:com.aa.bb.ClassName -->
<logger name="org.springframework.aop.framework.CglibAopProxy" additivity="false">
<level value="info" />
<appender-ref ref="stdout" />
</logger>
<!-- root将级别为“DEBUG”及大于“DEBUG”的日志信息交给已经配置好的名为“Console”的appender处理,“Console”appender将信息打印到Console -->
<root level="info">
<appender-ref ref="stdout" /> <!-- 标识这个appender将会添加到这个logger -->
<appender-ref ref="infoFile" />
<appender-ref ref="warnFile" />
<appender-ref ref="errorFile" />
</root>
</configuration>
Mybatis_config.xml:mybatis配置文件
代码如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://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://localhost:3306/mybatis_test?serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 加载sql的映射文件-->
<mapper resource="CourseMapper.xml"/>
</mappers>
</configuration>
其中
中的mybatis_test改为你自己的数据库名称,
这里改为你自己的数据库用户名和密码
、
这里改成你的sql映射文件(如下)
Sql映射文件如CourseMapper.xml:
代码如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace 名称空间-->
<mapper namespace="test">
<select id="selectAll" resultType="com.study.pojo.Course">
select * from course;
</select>
</mapper>
根据你自己的数据库表来命名,我的是course
这里的resultType就是你创建的表在Java里对应的具体类,根据你自己创建的位置引入
我的项目目录结构是:
4如上所说,编写实体类
如course类:
package com.study.pojo;
public class Course {
private Integer id ;
private String course_code ;
private String course_name ;
private String course_property ;
private String offering_semester ;
private String contact_hours ;
private String credit ;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getCourse_code() {
return course_code;
}
public void setCourse_code(String course_code) {
this.course_code = course_code;
}
public String getCourse_name() {
return course_name;
}
public void setCourse_name(String course_name) {
this.course_name = course_name;
}
public String getCourse_property() {
return course_property;
}
public void setCourse_property(String course_property) {
this.course_property = course_property;
}
public String getOffering_semester() {
return offering_semester;
}
public void setOffering_semester(String offering_semester) {
this.offering_semester = offering_semester;
}
public String getContact_hours() {
return contact_hours;
}
public void setContact_hours(String contact_hours) {
this.contact_hours = contact_hours;
}
public String getCredit() {
return credit;
}
public void setCredit(String credit) {
this.credit = credit;
}
@Override
public String toString() {
return "Course{" +
"id=" + id +
", course_code='" + course_code + '\'' +
", course_name='" + course_name + '\'' +
", course_property='" + course_property + '\'' +
", offering_semester='" + offering_semester + '\'' +
", contact_hours='" + contact_hours + '\'' +
", credit='" + credit + '\'' +
'}';
}
}
5 编写测试类mybatisDemo:
package com.study;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import com.study.pojo.Course;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class mybatisDemo {
public static void main(String[] args) throws IOException {
// 加载mybatis的核心配置文件,获取SQLsessionFactort
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession=sqlSessionFactory.openSession();
List<Course> courses= sqlSession.selectList("test.selectAll");
System.out.println(courses);
sqlSession.close();
}
}
6运行测试类:
如此就在maven中用mybatis完成了表中数据的查询。