首页 > 代码库 > MyBatils课程一
MyBatils课程一
MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得。
用xml文件构建SqlSessionFactory实例是非常简单的事情。推荐在这个配置中使用类路径资源(classpath resource),但你可以使用任何Reader实例,包括用文件路径或file://开头的url创建的实例。MyBatis有一个实用类----Resources,它有很多方法,可以方便地从类路径及其它位置加载资源。
搭建开发的环境:mybatis-3.1.1.jar和mysql-connector-java-5.1.7-bin.jar
- 配置文件:
1. 设置mybatis 配置文件:SQLMapconfig.xml, 在src目录下建立此文件(文件名任意,格式为.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>
<typeAliases>
<typeAlias alias="User" type="com.yiibai.mybatis.models.User" />
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="http://www.mamicode.com/com.mysql.jdbc.Driver" />
<property name="url" value="http://www.mamicode.com/jdbc:mysql://127.0.0.1:3306/yiibai" />
<property name="username" value="http://www.mamicode.com/root" />
<property name="password" value="" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/yiibai/mybatis/models/User.xml" />
</mappers>
</configuration>
2、定义表所对应的实体类,如下图所示:
package org.wangyi.com; import java.text.SimpleDateFormat; import java.util.Date; /** * 定义实体类 * * @author wangyi * @version 1.0 <br /> * <a href="http://www.mamicode.com/www.baidu.com">百度一下</a> */ public class User { private int id; private String username; private Date birthday; private String sex; private String 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; } @Override public String toString() { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); String bd = format.format(this.birthday); String content = "User[ " + this.id + "," + this.username + "," + this.sex + "," + bd + "," + this.address + " ]"; return content; } }
3、定义操作users表的sql映射文件userMapper.xml
创建一个me.gacl.mapping包,专门用于存放sql映射文件,在包中创建一个userMapper.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,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的 例如namespace="me.gacl.mapping.userMapper"就是me.gacl.mapping(包名)+userMapper(userMapper.xml文件去除后缀) --> <mapper namespace="org.wangyi.mapping.userMapper"> <!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为finduserByid,id属性值必须是唯一的,不能够重复 使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型 resultType="org.wangyi.com.User"就表示将查询结果封装成一个User类的对象返回 User类就是users表所对应的实体类 --> <!-- 根据id查询得到一个user对象 --> <select id="finduserByid" parameterType="int" resultType="org.wangyi.com.User"> select * from user where id=#{id} </select> </mapper>
下面是对这几个配置文件一点解释说明:
1、配置文件SQLMapconfig.xml.xml 是 mybatis 用来建立 sessionFactory,里面主要包含了数据库连接相关内容,还有 java 类所对应的别名,比如:<typeAlias alias="User" type="org.wangyi.mapping.userMapperr"/> 这个别名非常重要,在具体的类的映射中,比如:User.xml 中 resultType 就是对应这个。要保持一致,这里的 resultType 还有另外单独的定义方式,后面学习到我们再详细介绍说明。
2、SQLMapconfig.xml 里面 的<mapper resource="com/yiibai/mybatis/models/User.xml"/>是包含要映射的类的 xml 配置文件。
3、在userMapper.xml 文件里面主要是定义各种 SQL 语句,以及这些语句的参数,以及要返回的类型等等。
开始测试
package org.wangy.first; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; 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 org.wangyi.com.User; /** * MyBatis的入门程序 * * @author wangyi * @version 1.0 <br /> * <a href="http://www.mamicode.com/www.baidu.com">百度一下</a> * */ public class MyBatisFirst { // 查询一条记录 @Test public void findUserByid() throws IOException { // MyBatis的配置文件 String resource = "SQLMapConfig.xml"; // 得到SQLMapConfig.xml配置文件流 String path = MyBatisFirst.class.getClassLoader().getResource(resource) .getPath(); InputStream inputStream = new FileInputStream(path); // 使用MyBatis提供的Resources类加载mybatis的配置文件(它也加载关联的映射文件) // Reader reader = Resources.getResourceAsReader(resource)或者 // InputStream inputStream = Resources.getResourceAsStream(resource); // 创建MyBatis的会话工厂 SqlSessionFactory factory = new SqlSessionFactoryBuilder() .build(inputStream); // 得到会话sqlSession SqlSession sqlSession = factory.openSession(); // 通过sqlSession操作数据库 /** * 第一个参数:值=xxxMapper.xml文件中mapper标签的namespace属性的值+“.”+sql语句标签的id值, * 第二个参数:值=和映射文件所匹配的ResultType类型的参数 */ User user = sqlSession.selectOne( "org.wangyi.mapping.userMapper.finduserByid", 31); // 释放资源,不要忘记 sqlSession.close(); System.out.println(user); } }
MyBatils课程一