Mybatis实现

简介  

  MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

项目实践

工程截图:

准备工作:

mybatis-3.2.7.jar
mysql-connector-java-5.1.20-bin.jar

数据库表设计:

user类:

 1 public class User {
 2 
 3     private int id;
 4     private String name;
 5     private String sex;
 6     
 7     public int getId() {
 8         return id;
 9     }
10     public void setId(int id) {
11         this.id = id;
12     }
13     public String getName() {
14         return name;
15     }
16     public void setName(String name) {
17         this.name = name;
18     }
19     public String getSex() {
20         return sex;
21     }
22     public void setSex(String sex) {
23         this.sex = sex;
24     }
25     
26     @Override
27     public String toString() {
28         // TODO Auto-generated method stub
29         return "{" + id + "," + name + "," + sex + "}";
30     }
31 }

userMapper.xml

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 3 <!-- 
 4     为这个mapper指定一个唯一的namespace,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的
 5      例如namespace="me.gacl.mapping.userMapper"就是me.gacl.mapping(包名)+userMapper(userMapper.xml文件去除后缀)
 6 -->
 7 <mapper namespace="me.gacl.mapping.userMapper">
 8 <!-- 
 9     在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复
10     使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型
11     resultType="me.gacl.domain.User"就表示将查询结果封装成一个User类的对象返回
12     User类就是users表所对应的实体类
13 -->
14 <!-- 
15     根据id查询得到一个user对象
16 -->
17     <select id="getUsers" parameterType="int" 
18         resultType="cn.mybatis.model.User">
19         select * from user
20     </select>
21     
22     <select id="getUser" parameterType="int" 
23         resultType="cn.mybatis.model.User">
24         select * from user where id=#{id}
25     </select>
26 </mapper>

conf.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
 3 <configuration>
 4     <environments default="development">
 5         <environment id="development">
 6             <transactionManager type="JDBC" />
 7             <!-- 配置数据库连接信息 -->
 8             <dataSource type="POOLED">
 9                 <property name="driver" value="com.mysql.jdbc.Driver" />
10                 <property name="url" value="jdbc:mysql://localhost:3306/user" />
11                 <property name="username" value="root" />
12                 <property name="password" value="123456" />
13             </dataSource>
14         </environment>
15     </environments>
16     
17     <mappers>
18         <!-- 注册userMapper.xml文件, 
19         userMapper.xml位于cn/mybatis/mapping这个包下,所以resource写成cn/mybatis/mapping/userMapper.xml-->
20         <mapper resource="cn/mybatis/mapping/userMapper.xml"/>
21     </mappers> 
22 </configuration>

Test.java

 1 package cn.mybatis.test;
 2 
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 import java.util.ArrayList;
 6 import java.util.List;
 7 
 8 import org.apache.ibatis.session.SqlSession;
 9 import org.apache.ibatis.session.SqlSessionFactory;
10 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
11 
12 import cn.mybatis.model.User;
13 
14 public class Test {
15      public static void main(String[] args) throws IOException {
16             //mybatis的配置文件
17             String resource = "conf.xml";
18             //使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
19             InputStream is = Test.class.getClassLoader().getResourceAsStream(resource);
20             //构建sqlSession的工厂
21             SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
22             //使用MyBatis提供的Resources类加载mybatis的配置文件(它也加载关联的映射文件)
23             //Reader reader = Resources.getResourceAsReader(resource); 
24             //构建sqlSession的工厂
25             //SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
26             //创建能执行映射文件中sql的sqlSession
27             SqlSession session = sessionFactory.openSession();
28             /**
29              * 映射sql的标识字符串,
30              * me.gacl.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值,
31              * getUser是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL
32              */
33             String selectAll = "me.gacl.mapping.userMapper.getUsers";//映射sql的标识字符串
34            
35             //执行查询返回一个表的所有信息
36             List<User> users = new ArrayList<User>();
37             users = session.selectList(selectAll);
38             System.out.println(users);
39             
40             String selectOne = "me.gacl.mapping.userMapper.getUser";//映射sql的标识字符串
41             
42             //执行查询一个表的所有信息
43             User user = new User();
44             user.setId(5);
45             user = session.selectOne(selectOne, user.getId());
46             System.out.println(user);        
47         }
48 }

运行结果

原文地址:https://www.cnblogs.com/K-artorias/p/7403372.html