1、MyBatis的使用简介:
MyBatis是java开发过程中应用的持久层框架,对JDBC进行了封装,在使用MyBatis进行开发时更关注与SQL本身。
在学习MyBatis环境搭建时主要学习了三种方法:注解开发、dao接口映射文件代理类开发以及使用dao层实现类。
2、以下主要对MyBatis环境搭建进行代码分析:
2.1、注解方式开发:
2.1.1、 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>
<!--MyBatis 的数据库配置-->
<environments default="mysql">
<!--配置mySql数据库-->
<environment id="mysql">
<!--配置事务的类型-->
<transactionManager type="JDBC"></transactionManager>
<!--配置数据库源 数据库连接池-->
<dataSource type="POOLED"><!--数据库连接池-->
<!--连接数据库的四个基本属性-->
<!--<property name="driver" value="com.mysql.jdbc.Driver"/>--><!--数据库驱动-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/><!--数据库连接地址-->
<property name="username" value="root"/> <!--数据库连接用户名-->
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--指定映射配置文件的位置;
如果使用注解开发,则mapper标签中使用的是class属性,值为被注解的dao层(持久层)的全限定类名(例如:myBatis/dao/IUserDao)-->
<mapper class="myBatis.inerface.IUserDao"/>
</mappers>
</configuration>
2.1.2、dao层的映射注解接口文件:
package myBatis.inerface;
import Model.userModel;
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface IUserDao {
@Select("select * from user") //注解开发
List<userModel> findAll();
}
2.1.3、user表对应的封装类:
package Model;
import java.io.Serializable;
import java.util.Date;
/**
* user实体类
*/
public class userModel 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 "userModel{" +
"id=" + id +
", username='" + username + '\'' +
", birthday=" + birthday +
", sex=" + sex +
", address='" + address + '\'' +
'}';
}
}
2.1.4、读取配置文件,测试方法:
/**读取mybatis总的配置文件**/
//读取mybatis配置文件
InputStream ins = Resources.getResourceAsStream("mybatis_SqlConfig.xml");
//创建工厂类
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory ssf = builder.build(ins);
//使用工厂类创建SqlSession对象
SqlSession ss = ssf.openSession();
//使用SqlSession创建dao层的动态代理类
IUserDao iUserDao = ss.getMapper(IUserDao.class);
//使用代理对象执行方法
List<userModel> list = iUserDao.findAll();
for (userModel user: list) {
System.out.println(user);
}
//释放资源
ss.close();
ins.close();
上述为MyBatis注解开发的代码实现,运行测试方法后的运行结果为:
userModel{id=21, username=‘张三’, birthday=Tue Feb 27 17:47:08 CST 2018, sex=男, address=‘上海’}
userModel{id=32, username=‘李四’, birthday=Fri Mar 02 15:09:37 CST 2018, sex=女, address=‘深圳’}
userModel{id=43, username=‘王五’, birthday=Sun Mar 04 11:34:34 CST 2018, sex=女, address=‘北京重庆’}
userModel{id=45, username=‘赵柳’, birthday=Sun Mar 04 12:04:06 CST 2018, sex=男, address=‘北京’}
userModel{id=46, username=‘秦宝’, birthday=Wed Mar 07 17:37:26 CST 2018, sex=男, address=‘郑州’}
userModel{id=48, username=‘马莉’, birthday=Thu Mar 08 11:44:00 CST 2018, sex=女, address=‘济南’}
2.2、使用接口代理类实现:
此处需要着重说明的是,直接使用dao层接口方式进行持久层的开发,要保证以下三点:
1)保证.xml映射文件的路径与dao层接口映射.java文件的包路径一直(此处领路径不一致经过测试也可行,只要保证映射正确):
2)sql的映射文件和dao层接口文件都相当于是mapper文件,要保证sql映射文件中的namespace属性中的值为接口文件的路径名称:
3).xml映射文件中sql对应的id值与dao层接口中的方法名保持一致:
* 满足上述情况在myBatis中可以使用映射接口文件的代理类进行数据库访问开发,不再需要些接口的实现类
2.2.1、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>
<!--MyBatis 的数据库配置-->
<environments default="mysql">
<!--配置mySql数据库-->
<environment id="mysql">
<!--配置事务的类型-->
<transactionManager type="JDBC"></transactionManager>
<!--配置数据库源 数据库连接池-->
<dataSource type="POOLED"><!--数据库连接池-->
<!--连接数据库的四个基本属性-->
<!--<property name="driver" value="com.mysql.jdbc.Driver"/>--><!--数据库驱动-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/><!--数据库连接地址-->
<property name="username" value="root"/> <!--数据库连接用户名-->
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--指定映射配置文件的位置; -->
<mapper resource="myBatis/dao/IUserDao.xml"/>
</mappers>
</configuration>
2.2.2、接口方法:
package myBatis.inerface;
import Model.userModel;
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface IUserDao {
List<userModel> findAll();
}
2.2.3、SQL映射文件:
<?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="myBatis.inerface.IUserDao">
<select id="findAll" resultType="Model.userModel">
select * from user
</select>
</mapper>
2.2.4、测试方法:
//读取mybatis配置文件
InputStream ins = Resources.getResourceAsStream("mybatis_SqlConfig.xml");
//创建工厂类
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory ssf = builder.build(ins);
//
//使用工厂类创建SqlSession对象
SqlSession ss = ssf.openSession();
//使用SqlSession创建dao层的动态代理类
IUserDao iUserDao = ss.getMapper(IUserDao.class);
//使用代理对象执行方法
List<userModel> list = iUserDao.findAll();
for (userModel user: list) {
System.out.println(user);
}
//释放资源
ss.close();
ins.close();
经测试,运行结果与2.1相同。
2.3、dao层实现类方式:
2.3.1、MyBatis总的配置文件(ImplClass.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>
<environments default="MySql">
<environment id="MySql">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="sqlMapper/user.xml"/>
</mappers>
</configuration>
2.3.2、SQL映射文件(user.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="user">
<select id="findAll" resultType="Model.userModel">
select * from user
</select>
</mapper>
2.3.3、dao层实现类:
package myBatis.dao;
import Model.userModel;
import myBatis.inerface.IUserDao;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import java.util.List;
public class UserDao implements IUserDao {
private SqlSessionFactory factory = null;//用于接收创建数据库连接时的工厂类方法
public UserDao(SqlSessionFactory factory){
this.factory = factory;
}
@Override
public List<userModel> findAll() {
SqlSession ss = factory.openSession();
List<userModel> list = ss.selectList("user.findAll");
ss.close();//释放资源
return list;
}
}
2.3.4、测试方法:
* 拥有实现类的mybatis的环境搭建
//读取配置文件
InputStream in = Resources.getResourceAsStream("ImplClass.xml");
//创建工厂对象
SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
SqlSessionFactory ssf = ssfb.build(in);
//将创建的工厂对象传递给持久层-dao层的实现类构造方法中
UserDao ud = new UserDao(ssf);
List<userModel> list = ud.findAll();
for ( userModel model: list) {
System.out.println(model);
}
in.close();
在MyBatis的环境搭建时,学习并使用了上述三种方法,希望有一些帮助,时间仓促,整理不够细致,如有疏漏或想法可留言交流。