mybatis概述:
mybatis是一个持久层框架,用java编写的。他封装了jdbc操作的很多细节,使开发者只需要关注sql本身,无需关注创建驱动,链接.....等等
它使用了ORM思想实现了结果集的封装。
ORM:
object Relational Mappging 对象的关系映射。
简单来说:
就是把数据库表和实体类及实体类的属性对应起来
让我们可以操作实体类就可以就实现操作数据库表
mybatis环境搭建:
首先我们创建一个maven工程:
然后这样
得到一个maven工程pom文件:
我们需要在在这个pom文件中导入我们需要的依赖或者插件:
在pom文件里面添加这些依赖:其实只需要前俩个dependency就可以了。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.qcby</groupId>
<artifactId>day01_mybatis</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 包的形式-->
<packaging>jar</packaging>
<dependencies>
<!-- mybatis依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<!--链接数据库使用-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
</dependencies>
</project>
做到这里,mybatis依赖的环境搭建已经基本完成了
然后创建一个接受数据库的实体类User(在java里面创建的com.qcby.domain.User),里面实现他的get,set,tostring方法。和数据库中的列名对应。
package com.qcby.domain;
import java.io.Serializable;
import java.util.Date;
public class User implements Serializable {
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;
public Integer getId() {
return id;
}
public void setId(Integer 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 + '\'' +
'}';
}
}
在qcby目录下创建一个用户的持久层(dao)接口;即创建一个dao包,包里面放置一个IUserDao接口
package com.qcby.dao;
import com.qcby.domain.User;
import java.util.List;
/**
* 用户的持久层接口
*/
public interface IUserDao {
/**
*查询所有
*/
List<User> findAll();
}
在resources里面创建一个SqlMapConfig.xml的配置文件。此时这个文件是空的。我们需要在里面导入mybatis约束(https://mybatis.org/mybatis-3/zh/getting-started.html)
<?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">
和mybatis主配置文件:
<!--mybatis的主配置文件-->
<configuration>
<!-- 配置环境-->
<environments default="mysql">
<!-- 配置mysql的环境-->
<environment id="mysql">
<!-- 配置事务类型-->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源(连接池)-->
<dataSource type="POOLED">
<!-- 配置链接数据库的4个基本信息-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/数据库名"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
</configuration>
其中
environments的默认值可以随意写,但是得和environment的id 保持一致
配置事务类型一般是:JDBC
配置事务源用的是:POOLED(这个有堆栈的概念)
property里面写你链接数据库的信息
除此之外:
还得指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置,所以我们还得在
configuration标签里面加入:
<mappers>
<mapper resource="com/qcby/dao/IUserDao.xml"></mapper>
</mappers>
总体的mybatis主配置文件就完成了:
如下:
<?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">
<!--mybatis的主配置文件-->
<configuration>
<!-- 配置环境-->
<environments default="mysql">
<!-- 配置mysql的环境-->
<environment id="mysql">
<!-- 配置事务类型-->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源(连接池)-->
<dataSource type="POOLED">
<!-- 配置链接数据库的4个基本信息-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/数据库名"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/qcby/dao/IUserDao.xml"></mapper>
</mappers>
</configuration>
mapper里面的resource是我映射到的路径xml文件:
所以我得在resources目录下:创建一个com(Directory),com下创建一个qcby(Directory),qcby下创建一个dao(Directory),
dao下面创建一个IUserDao.xml文件(File)。
此时的IUserDao.xml什么都没有, 现在我得在IUserDao.xml进行设置。这个文件的主要功能是上面IUserDao接口的实现。
首先我们得在这个xml文件中加入Mapper的文件约束(https://mybatis.org/mybatis-3/zh/getting-started.html)。如下,可以在链接里面找到copy也行。
<?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">
好了,约束写好了之后就可是实现这个接口的实现方法。也就是sql查询。如下:
<mapper namespace="com.qcby.dao.IUserDao">
<!--配置查询所有-->
<select id="findAll" resultType="com.qcby.domain.User">
select * from user;
</select>
</mapper>
其中namespace的值是IUserDao的全限定类名,select标签里的id是IUserDao接口的findAll接口。通过全限定类名+方法的方式找到要实现的接口方法。(也就是通过
com.qcby.dao.IUserDao.findAll这个路径找这个接口的方法。执行sql语句
)
resultType="com.qcby.domain.User"的意思是将查询的结果封装到com下qcby下domain下的User对象List中.
整体IUserDao.xml代码如下:
<?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.qcby.dao.IUserDao">
<!--配置查询所有-->
<select id="findAll" resultType="com.qcby.domain.User">
select * from user;
</select>
</mapper>
到此。mybatis的环境搭建已经全部完成了。
总结一下:创建mybatis链接数据库的搭建
1、创建maven工程并导入坐标
2、创建实体类和dao接口
3、创建Mybatis的主配置文件
SqlMapConfig.xml
4、创建映射配置文件
IUserDao.xml
环境搭建的注意事项:
1、创建IUserDao.xml和IUserDao时是为了和我们之前的保持一致。在Mybatis中把持久层的操作接口名称和映射文件也叫做:Mapper。 所以IUserDao和IUserMapper是一样的
2、在idea创建目录时候,它和包是不一样的
包在创建时:com.qcby.dao是三级目录
目录在创建的时候:com.qcby.dao是一级目录
3、mybatis 的映射配置文件位置必须和dao接口包结构相同
4、映射配置文件的mapper标签namespace的属性值必须是dao接口的全修订类名
5、映射配置文件的操作配置select,id属性的取值必须是dao接口的方法名
接下来我们在text类的java里面测试一下(我创建了一个com.qcby.text.MybatisTest):
这个类主要进行的思想则有:
1、读取配置文件
2、创建一个SqlSessionFactoty工厂
3、使用工厂生产SqlSession对象
4、使用SqlSession创建Dao接口的代理对象
5、使用代理对象执行方法
6、释放资源
代码如下:
package com.qcby.text;
import com.qcby.dao.IUserDao;
import com.qcby.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 java.io.InputStream;
import java.util.List;
/**
*
*/
public class MybatisTest {
public static void main(String[] args) throws Exception {
// 1、读取配置文件
InputStream in= Resources.getResourceAsStream("SqlMapConfig.xml");
// 2、创建一个SqlSessionFactoty工厂
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
SqlSessionFactory factory =builder.build(in);
// 3、使用工厂生产SqlSession对象
SqlSession session=factory.openSession();
// 4、使用SqlSessio n创建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();
}
}
跑一下:
成功查询到数据了。如果想实现更多的sql操作只需要在IUserDao和IUserDao.xml操作