Mybatis的配置与实现

一、为什么要使用mybatis框架?

  在之前我们使用传统的jdbc操作方式对数据库进行增删改查。

比如进行user表查询:

//使用jdbc访问数据库
public class Demo{
    public static void main(String[] args) throws SQLException, ClassNotFoundException {
        //1.注册驱动
        DriverManager.registerDriver(new Driver());
        Class.forName("com.mysql.jdbc.Driver");
        
        //2.创建连接 三种方式
        //url是数据库的路径
        //Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/db2", "root", "123");
        //Properties properties = new Properties();
        //properties.setProperty("user", "root");
        //properties.setProperty("password", "123");
        //Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/db2", properties);
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/db2?user=root&password=123");
        //3.创建小车,并关联sql语句
        Statement statement = connection.createStatement(); 
        //3.1关联sql语句
         /*String sql = "select * from student1";
         //执行executerQuary方法,实现到数据库获取数据并存储到ResultSet对象里
         ResultSet set = statement.executeQuery(sql);//只适合查;增删改使用executeUpdate,增删改不用箱子
        //4.卸货(ResultSet)
        while    (set.next()) {//执行一次,取一条记录出来
            //Object object = set.getObject(2);
            Object object = set.getObject("name");
            System.out.println(object);
        }*/
        String sql = "select * from user";
        //返回的值到ResultSet中
        ResultSet rSet = statement.executeUpdate(sql);
        while(rSet.next()){
                       Object object = rSet.getObject("name");//此处只取名字
                }
            //5.关闭资源
        rSet.close();
        statement.close();
        connection.close();
    }    
}
                

    上述代码中我们可以看出:

      1.仅仅是执行一个简单的查询工作我们就需要写如此多的代码,这就使得程序员在编写代码的时候不仅仅需要关注业务需求了,还要记住这些繁杂的链接数据库的操作;(使用工具类如DButil,jdbcTemplate)

      2.并且上述代码存在大量的硬编码。  如:我需要查找另外一个数据库的数据,则需要在源代码中来修改数据库(配合资源配置文件可以解决)

        总结:所以使用mybatis框架可以解决这些问题

 

二、Mybatis的配置与简单使用:

  mybatis的概述
    mybatis是一个持久层框架,用java编写
    它封装了jdbc的很多操作细节,使开发者只需要关注sql语句本身,而无需关注注册驱动,创建连接等繁杂过程
    它使用了ORM思想实现了结果集的封装

    ORM:
      obejct relational mapping 对象关系映射
    简单的说:
      就是把数据库的实体类及实体类的属性对应起来
      让我们可以操作实体类就实现操作数据库

  mybatis的入门
    mybatis的环境搭建
    第一步:创建maven工程并导入坐标
    第二步:创建实体类和dao接口
    第三步:创建Mybatis的主配置文件SqlMapConfig.xml
    第四步:创建映射配置文件IUserDao.xml
  注意事项:
    1.mybatis的映射配置文件位置必须和dao接口的包结构相同
    2.映射配置文件的mapper标签namespace属性取值必须是dao接口的全限定类名
    3.映射配置文件的操作配置,id属性必须是接口中的方法名
    优点:在开发中无需写dao接口的实现类

mybatis框架实现增和查:

1 public interface IUserDao {
2     List<User> findAll();
3     void insertUser(User user);
4 }
Dao接口
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE mapper
 3         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 <mapper namespace="com.swpu.dao.IUserDao">
 6     <select id="findAll" resultType="com.swpu.domain.User">
 7         select * from user;
 8     </select>
 9 
10     <insert id="insertUser" parameterType="com.swpu.domain.User">
11         insert into user(username,address,sex,birthday) values (#{username},#{address},#{sex},#{birthday});
12     </insert>
13 </mapper>
Dao接口中User映射文件
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE configuration
 3         PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4         "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5 <configuration>
 6     <environments default="mysql">
 7         <!--mysql的环境配置-->
 8         <environment id="mysql">
 9             <transactionManager type="JDBC"/>
10             <dataSource type="POOLED">
11                 <property name="driver" value="com.mysql.jdbc.Driver"/>
12                 <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
13                 <property name="username" value="root"/>
14                 <property name="password" value="123"/>
15             </dataSource>
16         </environment>
17     </environments>
18 
19     <mappers>
20         <mapper resource="com/swpu/dao/IUserDao.xml"/>
21     </mappers>
22 </configuration>
SqlMapConfig配置文件

 

 1 public class User implements Serializable {
 2 
 3     private int id;
 4     private String username;
 5     private String address;
 6     private String sex;
 7     private Date birthday;
 8 
 9     public int getId() {
10         return id;
11     }
12 
13     public void setId(int id) {
14         this.id = id;
15     }
16 
17     public String getUsername() {
18         return username;
19     }
20 
21     public void setUsername(String username) {
22         this.username = username;
23     }
24 
25     public String getAddress() {
26         return address;
27     }
28 
29     public void setAddress(String address) {
30         this.address = address;
31     }
32 
33     public String getSex() {
34         return sex;
35     }
36 
37     public void setSex(String sex) {
38         this.sex = sex;
39     }
40 
41     public Date getBirthday() {
42         return birthday;
43     }
44 
45     public void setBirthday(Date birthday) {
46         this.birthday = birthday;
47     }
48 
49     @Override
50     public String toString() {
51         return "User{" +
52                 "id=" + id +
53                 ", username='" + username + '\'' +
54                 ", address='" + address + '\'' +
55                 ", sex='" + sex + '\'' +
56                 ", birthday=" + birthday +
57                 '}';
58     }
59 }
domain中的User

 

 

 

测试代码:

 1 public class MybatisTest {
 2     private InputStream in;
 3     private  SqlSession sqlSession;
 4     private IUserDao userDao;
 5 
 6     @Before//测试代码前执行
 7     public void init()throws Exception{
 8         //1.读取配置文件,生成字节输入流
 9         in = Resources.getResourceAsStream("SqlMapConfig.xml");
10         SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
11         sqlSession = factory.openSession();
12         userDao = sqlSession.getMapper(IUserDao.class);
13     }
14 
15     @After//测试代码后执行
16     public void destory() throws Exception{
17         sqlSession.commit();//一定要手动提交事务
18         sqlSession.close();
19         in.close();
20     }
21 
22     //查询所有
23     @Test
24     public void findAll(){
25         List<User> users = userDao.findAll();
26         for(User user : users){
27             System.out.println(user);
28         }
29     }
30 
31     //增加
32     @Test
33     public void testSave(){
34         User user = new User();
35         user.setUsername("你好comadin");
36         user.setAddress("西南石油大学");
37         user.setSex("男");
38         user.setBirthday(new Date());
39 
40         userDao.insertUser(user);
41     }
42 }

查询结果:

增加结果:

 

 

posted @ 2019-05-03 09:50  123gogo  阅读(301)  评论(0编辑  收藏  举报