1.MyBatis介绍
MyBatis是一个优秀的持久性框架,它对jdbc的操作进行封装,是开发者只需关注sql本身,而不需花精力去处理注册驱动、创建连接,创建statement等繁杂的过程。
原理:MyBatis通过xml或注解的方式将要执行的各种statement配置起来,通过java对象和statement的sql进行映射生成最终执行的sql语句,最后由MyBatis框架执行sql语句映射到java对象并返回。
2.MyBatis入门
mybatis的核心架构
图片转载至服务器之家 连接:
MyBatis开发步骤
1.创建持久化po类。
2.创建全局配置文件SqlMapConfig.xml
3.编写映射文件Mapper.xml
4.在SqlMapConfig.xml中加载映射文件
5.编写测试程序
测试程序的步骤如下:
- 读取配置文件
-
通过SqlSessionFactoryBuilder创建SqlSessionFactory会话工厂
-
通过SqlSessionFactory创建SqlSession
- 调用SqlSession中的操作数据库的方法
- 关闭SqlSession
案例:
1编写持久类
package oyb.domain; import java.io.Serializable; import java.util.Date; public class User implements Serializable{ private int id; private String username; private Date birthday; private String sex; private String address; @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", birthday=" + birthday + ", sex='" + sex + '\'' + ", address='" + 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; } }
编写全局配置文件SqlMapConfig.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> <!--配置mybatis的环境信息--> <environments default="development"> <environment id="development"> <!--配置JDBC事务控制,由mybatis管理--> <transactionManager type="JDBC"></transactionManager> <!--配置数据源,采用dbcp连接池--> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatisday01?useUnicode=true&characterEncoding=utf8"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> </configuration>
在src目录下创建sqlmap这个包,在包里面创建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"> <!-- id:statement的id,要求在命名空间内唯一 parameterType:传入的参数类型 resultType:返回的类型 #{id}:表示该占位符待接收参数的名称为id。 --> <select id="findUserById" parameterType="int" resultType="oyb.domain.User"> SELECT * FROM USER WHERE id = #{id} </select> </mapper>
在SqlMapConfig.xml中配置映射
<mappers> <mapper resource="oyb/sqlmap/User.xml"></mapper>
</mappers>
测试类:
package oyb.test; 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.Test; import oyb.domain.User; import java.io.IOException; import java.io.InputStream; public class test { @Test public void test() throws Exception { //读取配置文件 InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml"); //通过SqlSessionFactoryBuilder创建SqlSessionFactory会话工厂 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is); //通过SqlSessionFactory创建SqlSession SqlSession sqlSession = sessionFactory.openSession(); //调用SqlSession操作数据库的方法 User user = sqlSession.selectOne("findUserById", 28); System.out.println(user); } }