mybatis之入门

一、mybatis介绍

apache旗下的一个开源的顶级ORM框架(dao层的操作)

开始叫ibatis2010年经过升级后发布到google code上就改名为mybatis

定位:1.是一个做持久层操作的框架

      2.是一个半自动的ORM框架

二、原生态的jdbc存在的问题

问题一:频繁的创建和销毁连接,造成了资源浪费,影响了系统的性能。

解决方案设想:连接池(c3p0dbcp、阿里巴巴)

问题二:sql语句硬编码(写死了)

解决方案设想:将sql语句写入到mapper.xml文件中

问题三:sql语句中的参数硬编码

解决方案设想:将sql语句中参数写入到mapper.xml文件中

问题四:查询的结果返回的是一个结果集,而我们更希望返回是对象

解决方案设想:查询后自动返回对象

三、mybatis的原理(核心)

 

 

四、mybatis环境搭建

4.1、准备开发环境

 1、创建测试项目,普通java项目或者是JavaWeb项目均可,如下图所示:

  

2、添加相应的jar包(mybatis的核心包+依赖jar包+mysql驱动包)

也要在src文件里添加log4j的配置文件,用于显示执行记录

 

   

3、创建数据库和表,针对MySQL数据库

 请自己按照实体类(pojo)进行编写数据库

4.2、使用MyBatis查询表中的数据的配置

  1、添加Mybatis的配置文件SqlMapConfig.xml

  在src目录下创建一个SqlMapConfig.xml文件,如下图所示:

  

 

  SqlMapConfig.xml文件中的内容如下:

 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 
 7     <properties resource="basedao.properties"></properties>
 8     <environments default="development">
 9         <environment id="development">
10             <transactionManager type="JDBC" />
11             <dataSource type="POOLED">
12                 <property name="driver" value="${driver}" />
13                 <property name="url" value="${url}" />
14                 <property name="username" value="${user}" />
15                 <property name="password" value="${password}" />
16             </dataSource>
17         </environment>
18     </environments>
19     <!-- 加载mapper.xml文件 -->
20     <mappers>
21         <package name="org.maven.mapper"/>
22     </mappers>
23 </configuration>

   将basedao.properties文件放到src目录下:

 

   

2、定义表所对应的实体类,如下图所示:

  

 

  User类的代码如下:

 1 package org.java.pojo;
 2 
 3 /**
 4  * 1.请各位在入门的时候实体类中字段名和数据库中表的列名对应(不区分大小写)--讲解输出映射的时候解释
 5  * 2.在ssm框架开发过程中,所有的日期类型请使用java.util.Date;因为这样才能在springMVC中参数绑定
 6  */
 7 public class User {
 8     private Integer id;
 9     private String name;
10     private String password;
11     //GET,set请自行添加
12 }

 

  3、定义操作users表的sql映射文件userMapper.xml

  创建一个包,专门用于存放sql映射文件,在包中创建一个userMapper.xml文件,如下图所示:

  

 

 

  userMapper.xml文件的内容如下:

 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 <!-- namespace:名字空间
 6     如果在ibatis的开发中可以随便写,但是在mybatis的开发中有特殊含义,必须为对应接口的全限定名
 7  -->
 8 <mapper namespace="org.java.mapper.UserMapper">
 9     
10 </mapper>

 

  4、在SqlMapConfig.xml文件中加载userMapper.xml文件

 

四、mybatis入门程序

 

1、在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">
<!-- namespace:名字空间
    如果在ibatis的开发中可以随便写,但是在mybatis的开发中有特殊含义,必须为对应接口的全限定名
 -->
<mapper namespace="org.java.mapper.UserMapper">
    <!-- 1.根据主键查询
        select:用来查询的statement(标签)
         id:用来唯一的标识该mapper里面的statement(标签)
        parameterType:输入参数的类型
        #{}:占位符,如果输入参数类型为简单类型,那么#{可以写任意的名字}
        resultType:返回结果的类型(即返回类型的全限定名)
     -->
    <select id="getById" parameterType="Integer" resultType="org.java.pojo.User">
        SELECT * FROM USER WHERE id= #{abc}
        <!-- 根据姓名做模糊查询 要用占位符是:${},如果查询是简单类型,必须为${value} 但存在sql注入问题-->
    </select>
        <select id="getByName" parameterType="String" resultType="org.java.pojo.User">
        SELECT * FROM USER WHERE name like '%${name}%'
    </select>
</mapper>

 

2.在对应的接口类里添加对应的方法:

package org.java.mapper;

import java.util.List;
import org.java.pojo.User;

public interface UserMapper {
    /*
     * 方法名必须和对应的xml里statement标签id名一致
     * 输入参数类型和返回类型也要和标签里的一致
     */
    User getById(Integer id);
    //根据姓名做模糊查询
    List<User> getByName(String name);

}

3.使用junit进行测试

package org.java.mapper;

import static org.junit.Assert.*;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.java.pojo.User;
import org.java.tools.myUtils;
import org.junit.Before;
import org.junit.Test;

public class UserMapperTest {
    SqlSession sqlSession =null;
    UserMapper userMapper=null;
    @Before
    //执行任何方法时先执行该方法
    public void upset() throws Exception{

            sqlSession=myUtils.getsqlsession();
            userMapper=sqlSession.getMapper(UserMapper.class);
    }

    @Test
    public void testGetById() {
        System.out.println(userMapper.getById(1).getName());
    }

    @Test
    public void testGetByName() {
        List<User> list=userMapper.getByName("a");
        System.out.println(list.size());
    }
    

}

测试结果

 

posted on 2017-07-09 18:06  小关ent  阅读(200)  评论(0编辑  收藏  举报

导航