Mybatis
我的第一个mybatis程序
1、环境搭建
搭建数据库:
CREATE DATABASE `mybatis`;
USE `mybatis`;
CREATE TABLE `user`(
`id` int(20) NOT NULL PRIMARY KEY,
`name` VARCHAR(30) DEFAULT NULL,
`pwd` VARCHAR(30) DEFAULT NULL
)ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO `user` ( `id`, `name`, `pwd` )
VALUES
( 1, '海棠', '123476' ),
( 2, '杜鹃', '123486' ),
( 3, '水仙', '123496' )
新建一个Maven项目
删除src目录(用作父工程,只是搭建第一个mybatis程序可以省略这一步,进入下一步)
导入依赖:
<!--导入依赖-->
<dependencies>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
创建一个子模块
最终的目录结构:
2、代码编写
- 在Resources下建立一个mybatis-config.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><!--configuration:核心配置文件-->
<environments default="development"><!--environments下面有多个environment,说明可以配置多套环境 | default="development":表示选择了开发环境-->
<environment id="development"><!--development:开发-->
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--每一个xxxMapper.xml都要在这里注册-->
<mappers>
<mapper resource="com/xu/dao/UserMapper.xml"/>
</mappers>
</configuration>
编写获得sqlsession的工具类:
SqlSession 完全包含了面向数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。
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.IOException;
import java.io.InputStream;
//SqlSession 完全包含了面向数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。
//SqlSessionFactoryBuilder--->SqlSessionFactory--->sqlSession
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
//获得sqlSessionFactory对象,通过它来获得sqlSession
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getsqlSession(){
//获得SqlSession
return sqlSessionFactory.openSession();
}
}
编写和数据库对应的实体类:
package com.xu.pojo; public class User { private int id; private String name; private String pwd; public User() { } public User(int id, String name, String pwd) { this.id = id; this.name = name; this.pwd = pwd; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", pwd='" + pwd + '\'' + '}'; } }
编写dao层
接口:
package com.xu.dao; import com.xu.pojo.User; import java.util.List; public interface UserMapper {//名字mybatis喜欢叫xxxMapper,没什么关系 List<User> getUserList(); }
对应的UserMapper.xml
UserMapper.xml等价于原来的UserMapperImpl
<?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="com.xu.dao.UserMapper"> <!--namespace:绑定一个对应dao中的接口--> <select id="getUserList" resultType="com.xu.pojo.User"> select * from mybatis.user </select> <!--id:接口中方法的名字--> <!--resultType:返回的结果类型--> <!-- <select></select> :对应的执行说明语句就用说明标签--> </mapper>
编写测试类
在test文件夹中编写,目录最好和main文件夹的结构目录对应
package com.xu.dao; import com.xu.pojo.User; import com.xu.utils.MybatisUtils; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.List; public class UserMapperTest { @Test public void test(){ //从编写好的Mybatis工具类中获取Sqlsession对象 SqlSession sqlSession = MybatisUtils.getsqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); List<User> userList = mapper.getUserList(); for (User user:userList) { System.out.println(user); } //关闭Sqlsession sqlsession.close(); } }
结果:
注意点:
①不要忘记在核心配置文件中注册Mapper.xml
②由于Maven约定大于配置,可能会出现资源无法导出,导致的初始化异常,我们可以加上以下代码进行规避
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>