IDEA实现Mybatis简单快速入门
一、Mybatis环境配置
- 使用IDEA创建空白Maven项目;
- 创建完成以后,在pom.xml文件中添加相关依赖
<dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.18</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.25</version> </dependency> </dependencies>
- 添加完成以后,在项目根目录右键,找到maven–>reimport,重新导入
- 在main-java目录下创建数据库内容对应的实体类和对应的dao接口
(1)User类代码如下:
package im.hwp.domain;
import java.io.Serializable;
public class User implements Serializable {
private String username;
private String password;
private int id;
public User() {
}
public User(String username, String password, int id) {
this.username = username;
this.password = password;
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
", id=" + id +
'}';
}
}
(2)dao接口如下:
package im.hwp.mapper;
import im.hwp.domain.User;
import org.apache.ibatis.annotations.Select;
public interface UserMaper {
@Select("select * from user where id=#{id} ")
User findUserById(int id);
}
- 导入完成以后,在main目录下,将resources目录设置成source root
- 需要新建三个文件和一个文件夹
(1)在resource目录下新建mybaits-config.xml
请注意,此处文件配置是按照xml方式,基于注解的方法请参考后文
<?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>
<!--加载文件属性-->
<properties resource="mysql.properties"></properties>
<!--给包中的类注册别名-->
<typeAliases>
<typeAlias type="im.hwp.domain.User" alias="User"/>
</typeAliases>
<!--配置环境-->
<environments default="development">
<!--配置一个id为development的环境-->
<environment id="development">
<!--使用JDBC事务-->
<transactionManager type="JDBC"></transactionManager>
<!--数据库连接池-->
<!-- mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI -->
<!-- POOLED 表示支持JDBC数据源连接池 -->
<!-- UNPOOLED 表示不支持数据源连接池 -->
<!-- JNDI 表示支持外部数据源连接池 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!--引用映射文件-->
<mappers>
<mapper resource="mapper/User.xml"/>
</mappers>
<!-- Continue going here -->
</configuration>
(2)在resources目录下新建mysql.properties文件,添加代码如下
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=123
(3)在resources目录下新建log4j.properties文件,代码如下
### 设置Logger输出级别和输出目的地 ###
log4j.rootLogger=debug,stdout,logfile
### 把日志信息输出到控制台 ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
### 把日志信息输出到文件:jbit.log ###
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=jbit.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %F %p %m%n
### 显示SQL语句部分
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
(4)在resources文件夹下新建mapper包,用于存放对应的mapper.xml文件
在本例中,只有一个User.xml文件。代码如下:
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace设置格式:包名+SQL映射文件名-->
<!--<mapper namespace="im.hwp.mapper.UserMapper">-->
<mapper namespace="im.hwp.mapper.UserMapper">
<!--根据用户ID查询用户信息-->
<select id="findUserById" parameterType="int" resultType="User">
select * from user where id = #{id}
</select>
</mapper>
- 在test目录下新建Apptest类,用于测试,代码如下
package im.hwp;
import im.hwp.domain.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 org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.InputStream;
import java.util.List;
public class Apptest {
private SqlSessionFactory sqlSessionFactory;
private SqlSession sqlSession;
@Before
public void init() {
//读取mybatis配置文件
String resource = "mybatis-config.xml";
InputStream inputStream;
try {
//得到配置文件流
inputStream = Resources.getResourceAsStream(resource);
//根据配置文件信息,创建会话工厂
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//通过工厂得到Sqlsession
sqlSession = sqlSessionFactory.openSession();
} catch (Exception e) {
e.printStackTrace();
}
}
//根据id查询用户
@Test
public void testFindUserById() {
//通过sqlSession执行映射文件中定义的SQL,并返回映射结果
User user = sqlSession.selectOne("findUserById", 1);
//打印输出结果
System.out.println(user.toString());
}
@After
public void destroy() {
//提交事务
sqlSession.commit();
//关闭sqlSession
sqlSession.close();
}
}
- 数据库中新建user表,结构如下:
到此,demo搭建基本完成。文件目录结构参考如下:
二、Mybatis 使用
1.基于xml方式
使用xml方式,需要用到上面创建的User.xml文件,同时在mybatis-config.xml文件中进行相关配置。 配置代码如下:
<mappers>
<mapper resource="mapper/User.xml"/>
</mappers>
使用Apptest类中testFindUserById方法测试demo,控制台打印用户信息如下:
User{username='huang', password='123', id=1}
2.基于注解方式
使用注解方式需要修改两处,mybatis-config.xml中的mapper配置和UserMapper.java中的注解
相关代码如下:
mybatis-config.xml ,需要将原来基于xml的mapper配置修改成如下配置
<mappers>
<mapper class="im.hwp.mapper.UserMaper"/>
</mappers>
UserMapper.java 在对应方法体上面添加注解
@Select("select * from user where id=#{id} ")
User findUserById(int id);
两处修改完成以后,执行Apptest中测试方法,控制台输出如下:
User{username='huang', password='123', id=1}
初次学习,理解不到位,如有错误欢迎指正!感谢!