使用IDEA搭建MyBatis环境
pom.xml中添加依赖:(log4j可以在控制台输出执行的sql语句,便于观察)
<dependencies>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>3.5.2version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>8.0.18version>
dependency>
<dependency>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
<version>1.2.17version>
dependency>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.13-beta-3version>
<scope>testscope>
dependency>
dependencies>
注意包名,在src/main/java下创建包com.cjx.entity和com.cjx.dao
package com.cjx.entity;
import java.io.Serializable;
import java.util.Date;
/**
* @author :
* @date :Created in 2019/11/7 17:03
* @description : user
*/
public class User implements Serializable {
private int id;
private String username;
private Date birthday;
private String sex;
private String address;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", birthday=" + birthday +
", sex='" + sex + '\'' +
", address='" + address + '\'' +
'}';
}
}
package com.cjx.dao;
import com.cjx.entity.User;
import java.util.List;
/**
* @author :
* @date :Created in 2019/11/7 17:07
* @description : dao
*/
public interface IUserDao {
/**
* @author :
* @description :查询所有
* @date :Created in 2019/11/7
*/
List<User> findAll();
}
这里要提前准备好一个数据库,这里取名为eesy_mybatis,表名为user,设计如下图:
随便往里面添加一些数据。
在resources中创建文件SqlMapConfig.xml
<configuration>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/eesy_mybatis"/>
<property name="username" value="root"/>
<property name="password" value="1999"/>
dataSource>
environment>
environments>
<mappers>
<mapper resource="com/cjx/dao/IUserDao.xml"/>
mappers>
configuration>
在resources中创建目录com.cjx.dao,然后创建文件IUserDao.xml
<mapper namespace="com.cjx.dao.IUserDao">
<select id="findAll" resultType="com.cjx.entity.User">
select * from user
select>
mapper>
与SqlMapConfig同级创建log4j.properties文件
log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[service] %d - %c -%-4r [%t] %-5p %c %x - %m%n
#log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
#log4j.appender.R.File=../logs/service.log
#log4j.appender.R.layout=org.apache.log4j.PatternLayout
#log4j.appender.R.layout.ConversionPattern=[service] %d - %c -%-4r [%t] %-5p %c %x - %m%n
#log4j.logger.com.ibatis = debug
#log4j.logger.com.ibatis.common.jdbc.SimpleDataSource = debug
#log4j.logger.com.ibatis.common.jdbc.ScriptRunner = debug
#log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate = debug
#log4j.logger.java.sql.Connection = debug
log4j.logger.java.sql.Statement = debug
log4j.logger.java.sql.PreparedStatement = debug
log4j.logger.java.sql.ResultSet =debug
当我们遵从了3、4、5点后,我们在开发中就无需再写dao的实现类,剩下的功能会由MyBatis来实现。
在test/java中创建包com.cjx.test,创建类MybatisTest,在类中创建Main函数,主要有以下几步:
代码如下:
package com.cjx.test;
import com.cjx.dao.IUserDao;
import com.cjx.entity.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.InputStream;
import java.util.List;
/**
* @author :
* @date :Created in 2019/11/8 10:12
* @description : 入门案例
*/
public class MybatisTest {
/**
* @author :
* @description :入门案例
* @param : [args]
* @return : void
* @date :Created in 2019/11/8
*/
public static void main(String[] args) throws Exception {
//1.读取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
//3.使用工厂生产一个SqlSession对象
SqlSession session = factory.openSession();
//4.使用SqlSession创建dao接口的代理对象
IUserDao userDao = session.getMapper(IUserDao.class);
//5.使用代理对象执行方法
List<User> users = userDao.findAll();
for (User user :
users) {
System.out.println(user);
}
//6.释放资源
session.close();
in.close();
}
}
这是因为Maven默认的Java版本是1.5,而大部分人装的都是新的版本。解决方法如下:
<properties>
<java.version>13java.version>
<maven.compiler.source>13maven.compiler.source>
<maven.compiler.target>13maven.compiler.target>
properties>
解决方法:在数据库链接后面加上时区参数"?serverTimezone=UTC",即修改SqlMapConfig.xml文件中的这一句
<property name="url" value="jdbc:mysql://localhost:3306/eesy_mybatis?serverTimezone=UTC"/>
使用注解方式就可以删除掉映射配置文件,使用注解来代替,使项目更加简洁。
在创建dao接口时,在findAll方法上加注解@Select(“select * from user”)即可取代映射配置文件。代码如下:
package com.cjx.dao;
import com.cjx.entity.User;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
* @author :
* @date :Created in 2019/11/7 17:07
* @description : dao
*/
public interface IUserDao {
/**
* @author :
* @description :查询所有
* @date :Created in 2019/11/7
*/
@Select("select * from user")
List<User> findAll();
}
在SqlMapConfig.xml中,配置mapper时使用class属性指定dao接口的全限定类名,代码如下:(主要是最后几行发生了变化),配置完成后就可以把resources下的com.cjx.dao.IUserDao.xml文件删掉,因为注解可以完全取代xml配置文件了。
<configuration>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/eesy_mybatis?serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="1999"/>
dataSource>
environment>
environments>
<mappers>
<mapper class="com.cjx.dao.IUserDao"/>
mappers>
configuration>
删除IUserDao.xml后再次点击运行,仍然可以成功运行。