初识Mybatis框架,实现增删改查等操做(动态拼接和动态修改)

此第一次接触Mybatis框架确实是有点不适应,特别是刚从Hibernate框架转转型过来,那么为何要使用Mybatis框架,Mybatis框架和Hibernate框架又有什么异同呢?sql

这个问题在个人另外一篇blogs中有专门的讲解,今天我主要是带着你们来探讨一下如何简单的使用Mybatis这个框架数据库

可能有的朋友知道,Mybatis中是经过配置文件来实现这个的,这里面有不少的东西,咱们就一点一点的讲吧express

咱们想要配置成功,首要的就是jar包,先从官网下载相应的jar包做为程序的支撑apache

 

有了jar包以后我么就来看看咱们程序的主要的搭建session

具体类的内容以下mybatis

Student    Classoracle

package entity;
/*
 * 学生类
 * */
public class Student {
    //学生编号
    private Integer sid;
    //学生名称
    private String sname;
    //学生性别
    private String sex;
    
    
    
    
    
    
    
    
    
    
    public Student() {
    }
    public Student(String sname, String sex) {
        this.sname = sname;
        this.sex = sex;
    }
    public Integer getSid() {
        return sid;
    }
    public void setSid(Integer sid) {
        this.sid = sid;
    }
    public String getSname() {
        return sname;
    }
    public void setSname(String sname) {
        this.sname = sname;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    
}

 

Grade  Classapp

package entity;
/*
 * 班级类
 * */
public class Grade {
    //班级编号
    private Integer gid;
    //班级名称
    private String gname;
    //班级描述
    private String gdesc;
    
    
    
    
    public Grade() {
    }
    public Grade(Integer gid, String gname, String gdesc) {
        this.gid = gid;
        this.gname = gname;
        this.gdesc = gdesc;
    }
    public Integer getGid() {
        return gid;
    }
    public void setGid(Integer gid) {
        this.gid = gid;
    }
    public String getGname() {
        return gname;
    }
    public void setGname(String gname) {
        this.gname = gname;
    }
    public String getGdesc() {
        return gdesc;
    }
    public void setGdesc(String gdesc) {
        this.gdesc = gdesc;
    }
    
}

接下来我么就要配置咱们的主要配置文件了,主要是指定咱们要链接的数据库和具体链接操做框架

Configuration.xmlless

<?xml version="1.0" encoding="UTF-8" ?>
<!--

       Copyright 2009-2012 the original author or authors.

       Licensed under the Apache License, Version 2.0 (the "License");
       you may not use this file except in compliance with the License.
       You may obtain a copy of the License at

          http://www.apache.org/licenses/LICENSE-2.0

       Unless required by applicable law or agreed to in writing, software
       distributed under the License is distributed on an "AS IS" BASIS,
       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       See the License for the specific language governing permissions and
       limitations under the License.

-->
<!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
<!-- 
  <settings>
    <setting name="useGeneratedKeys" value="false"/>
    <setting name="useColumnLabel" value="true"/>
  </settings>

  <typeAliases>
    <typeAlias alias="UserAlias" type="org.apache.ibatis.submitted.complex_property.User"/>
  </typeAliases> -->
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC">
        <property name="" value=""/>
      </transactionManager>
      <dataSource type="UNPOOLED">
        <property name="driver" value="oracle.jdbc.OracleDriver"/>
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
        <property name="username" value="practice"/>
        <property name="password" value="123"/>
      </dataSource>
    </environment>
  </environments>
  
   <mappers>
    <mapper resource="config/Student.xml"/>
  </mappers> 

</configuration>

 

其实最主要的是以下图所示

 

到这里为止,全部的准备工做基本上就已是完成了

接下来,使用Mybatis框架来实现咱们的具体操做‘

1.查询全部学生信息

 由于Mybatis是属于一种半自动化的框架技术因此呢sql是咱们手动书写的,这也是Mybatis的一大特色

咱们能够写出具体的实体配置文件

Student.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--

       Copyright 2009-2012 the original author or authors.

       Licensed under the Apache License, Version 2.0 (the "License");
       you may not use this file except in compliance with the License.
       You may obtain a copy of the License at

          http://www.apache.org/licenses/LICENSE-2.0

       Unless required by applicable law or agreed to in writing, software
       distributed under the License is distributed on an "AS IS" BASIS,
       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       See the License for the specific language governing permissions and
       limitations under the License.

-->

<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="Student">

  <resultMap type="entity.Student" id="StudentResult">
    <id column="sid" jdbcType="INTEGER" property="sid"/>
    <result column="sname" jdbcType="VARCHAR" property="sname"/>
    <result column="sex" jdbcType="VARCHAR" property="sex"/>
  </resultMap>
    
    <select id="selectAllStu"  resultMap="StudentResult">
        select * from Student
    </select>
 
</mapper>

 

既然咱们写了sql也指定了相应的实体类,那么咱们到如今为止还并无用到它,因此咱们还须要在主配置文件中添加实体配置文件的引用

 

通过以上的步骤, 咱们查询所有学生的配置文件基本上就已经完成了,如今咱们来进行一道测试

/*
     * 1.1 查询全部的学生信息
     * */
    @Test
    public void OneTest() throws Exception{
        //经过配置文件获取到数据库链接信息
        Reader reader = Resources.getResourceAsReader("config/Configuration.xml");
        //经过配置信息构建一个SessionFactory工厂
        SqlSessionFactory sqlsessionfactory=new SqlSessionFactoryBuilder().build(reader);
        //经过SessionFaction打开一个回话通道
        SqlSession session = sqlsessionfactory.openSession();
        //调用配置文件中的sql语句
        List<Student> list = session.selectList("Student.selectAllStu");
        //遍历查询出来的结果
        for (Student stu : list) {
            System.out.println(stu.getSname());
        }
        
        session.close();
    }

执行以后的语句以下

 这样咱们使用Mybatis查询全部学生信息就完成了

 

2.带条件查询动态Sql拼接

/*
     *1.2 带条件查询信息(动态Sql拼接)
     * */
    @Test
    public void selectAllStuByWhere() throws Exception{
        //经过配置文件获取到数据库链接信息
        Reader reader = Resources.getResourceAsReader("config/Configuration.xml");
        //经过配置信息构建一个SessionFactory工厂
        SqlSessionFactory sqlsessionfactory=new SqlSessionFactoryBuilder().build(reader);
        //经过SessionFaction打开一个回话通道
        SqlSession session = sqlsessionfactory.openSession();
        //准备一个学生对象做为参数
        Student student=new Student();
        student.setSname("3");
        //调用配置文件中的sql语句
        List<Student> list = session.selectList("Student.selectAllStuByWhere",student);
        //遍历查询出来的结果
        for (Student stu : list) {
            System.out.println(stu.getSname());
        }
        
        session.close();
    }

 

 

小配置配置文件信息

<?xml version="1.0" encoding="UTF-8"?>
<!--

       Copyright 2009-2012 the original author or authors.

       Licensed under the Apache License, Version 2.0 (the "License");
       you may not use this file except in compliance with the License.
       You may obtain a copy of the License at

          http://www.apache.org/licenses/LICENSE-2.0

       Unless required by applicable law or agreed to in writing, software
       distributed under the License is distributed on an "AS IS" BASIS,
       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       See the License for the specific language governing permissions and
       limitations under the License.

-->

<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="Student">

  <resultMap type="entity.Student" id="StudentResult">
    <id column="sid" jdbcType="INTEGER" property="sid"/>
    <result column="sname" jdbcType="VARCHAR" property="sname"/>
    <result column="sex" jdbcType="VARCHAR" property="sex"/>
  </resultMap>
    
    <!-- 简单查询全部信息 -->
     <select id="selectAllStu"  resultMap="StudentResult">
        select sid,sname,sex,gid from Student 
    </select> 
    
    <!--动态拼接Sql  -->
     <select id="selectAllStuByWhere" parameterType="entity.Student"  resultMap="StudentResult">
        select sid,sname,sex,gid from Student where 1=1
        <if test="sname!=null and !&quot;&quot;.equals(sname.trim())">
            and sname like '%'|| #{sname}|| '%' <!-- 模糊查询 -->
            <!-- and sname = #{sname} -->
        </if>
        
     </select>
</mapper>

 

执行以后的结果就是

 

3.新增学生信息

/*
     * 1.3 新增学生信息
     * 
     * */
    @Test
    public void InsertStuInfo() throws Exception{
        //经过配置文件获取配置信息
        Reader reader = Resources.getResourceAsReader("config/Configuration.xml");
        //构建一个SessionFactory,传入配置文件
        SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(reader);
        //获取session
        SqlSession session = factory.openSession();
        //准备参数对象
        Student stu=new Student();
        stu.setSname("巴黎的雨季");
        stu.setSex("");
        //调用添加方法
        int count = session.insert("Student.InsertStuInfo", stu);
        if(count>0){
            System.out.println("添加成功");
        }else{
            System.out.println("添加失败");
        }
        //提交
        session.commit();
        //关闭
        session.close();
    }

 

在小配置中增长一个节点

<!-- 新增学生信息 -->
     <insert id="InsertStuInfo" parameterType="entity.Student" >
         insert into Student values(SEQ_NUM.Nextval,#{sname},#{sex},1)
     </insert>

执行以后结果为

后续的删除和修改代码基本上和新增是一致的,只是调用的sql语句不一样,因此后续我就不作详细的解释了,只将代码摆出来,详细你们都可以看得明白!!

 

4.删除学生信息根据id

/*
     * 1.4根据SID删除学生信息
     * */
    @Test
    public void DeleteStuBySid()throws Exception{
        //经过配置文件获取配置信息
        Reader reader = Resources.getResourceAsReader("config/Configuration.xml");
        //构建一个SessionFactory,传入配置文件
        SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(reader);
        //获取session
        SqlSession session = factory.openSession();
        //准备参数
        int sid=2;
        //调用删除方法
        int count = session.delete("Student.DeleteStuBySid", sid);
        if(count>0){
            System.out.println("删除成功");
        }else{
            System.out.println("删除失败");
        }
        //提交
        session.commit();
        //关闭
        session.close();
    }

 

须要在配置文件中新增的是

 <!-- 删除学生信息 -->
     <insert id="DeleteStuBySid" parameterType="int">
         delete from Student where sid=#{sid}
     <!--或者是     delete from Student where sid=#{_parameter} -->
     </insert>

 

5.根据SID修改学生信息

/*
     * 1.5根据SID修改学生信息
     * 
     * */
    @Test
    public void UpdateStuBySid()throws Exception{
        //经过配置文件获取配置信息
        Reader reader = Resources.getResourceAsReader("config/Configuration.xml");
        //构建一个SessionFactory,传入配置文件
        SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(reader);
        //获取session
        SqlSession session = factory.openSession();
        //准备参数对象
        Student stu=new Student();
        stu.setSid(1);
        stu.setSname("绿茵");
        stu.setSex("");
        //调用删除方法
        int count = session.update("Student.UpdateStuBySid", stu);
        if(count>0){
            System.out.println("修改为功");
        }else{
            System.out.println("修改失败");
        }
        //提交
        session.commit();
        //关闭
        session.close();
    }

 

须要在配置文件中添加的是

 

 <!-- 根据SID修改学生信息 -->
     <update id="UpdateStuBySid" parameterType="entity.Student" >
     <!--     update Student set sname=#{sname},sex=#{sex} where sid=#{sid} -->
          update Student
         <set>
             <if test="sname!=null">
                 sname=#{sname},
             </if>
             <if test="sex!=null">
                 sex=#{sex},
             </if>
         </set>
         where sid=#{sid} 
     </update>

 

 

 

  

 以上咱们就简单的完成了对Mybatis的增、删、改、查的基本操做了,关于Mybatis的一些高级内容的讲解我会继续在后中为你们持续讲解

相关文章
相关标签/搜索