Mybatis

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis相关的知识,希望对你有一定的参考价值。

MyBatis

MyBatis简介:

1.MyBatis本是apache的一个开源网站,

2.iBatis是半ORM映射框架,它需要在数据库里手动建表,CURD操作时要自己写SQL语句,而Hibernate是全ORM映射框架,它只需要配置好文件,表会自动生成,CURDSQL语句也是自动生成的,这是他们的主要区别。

3.MyBatis小巧,简单易学

一.使用MyBatis实现查询部门信息的案例

  步骤一:在项目中导入JAR包,并且配置jar包

  技术分享

  步骤二:创建实体类Dept以及Dept.xml小配置文件

  

/*
 * 部门实体类
 */
public class Dept {
    private Integer deptNo;    //部门编号    
    private String deptName;    //部门名称
    public Integer getDeptNo() {
        return deptNo;
    }
    public void setDeptNo(Integer deptNo) {
        this.deptNo = deptNo;
    }
    public String getDeptName() {
        return deptName;
    }
    public void setDeptName(String deptName) {
        this.deptName = deptName;
    }
    @Override
    public String toString() {
        return "Dept [deptNo=" + deptNo + ", deptName=" + deptName + "]";
    }
    
}
<!--Dept.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="cn.a.entity.Dept">
<!-- id:唯一标识:通过此id,程序可唯一锁定一条SQL 
     parameterType:参数类型
     resultType:结果类型
-->
    <!-- 查询所有部门信息 -->
    <select id="selectDept" resultType="cn.a.entity.Dept">
        select * from dept
    </select>
</mapper>

  步骤三:编写mybatis-config.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>
    <environments default="development">
        <environment id="development">
        <!-- 事务策略是JDBC -->
            <transactionManager type="JDBC" />
            <!-- 数据源的方式 -->
            <dataSource type="POOLED">
                <property name="driver" value="oracle.jdbc.OracleDriver" />
                <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" />
                <property name="username" value="Hibernate" />
                <property name="password" value="orcl" />
            </dataSource>
        </environment>
    </environments>
    <!--映射文件:描述某个实体和数据库表的对应关系 -->
    <mappers>
        <mapper resource="cn/a/entity/Dept.xml" />
    </mappers>
</configuration>

  步骤四:编写测试类,查询所有部门信息

 

SqlSession session;
    @Before
    public void before() throws IOException
    {
             //1.1构建在Hibernate中的DB Connection的Sessuin对象
                //session-->SQLSessionFactory-->SQLSessionFactoryBuilder
                Reader reader=Resources.getResourceAsReader("mybatis-config.xml");
                SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(reader);
                session= factory.openSession();
    }

 

/**
     * 查询所有部门信息
     * @throws Exception
     */
    @Test
    public void selectDeptTest() throws Exception
    {
     //在Dept.xml文件指定了返回值类型为Dept强类型所以用List<Dept>接收 List
<Dept> selectList = session.selectList("selectDept"); for (Dept dept : selectList) { System.out.println(dept); } }

  运行效果如下:

  技术分享

 

 

二.使用MyBatis添加部门,添加deptNo为2,deptName为人力部的部门信息

因为我们上面第一个演示案例不用再重复之前的步骤,只需要将小配置文件修改以及将测试类代码修改即可

  Dept.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="cn.a.entity.Dept">
<!-- id:唯一标识:通过此id,程序可唯一锁定一条SQL 
     parameterType:参数类型
     resultType:结果类型
-->
    <!-- 查询所有部门信息 -->
    <select id="selectDept" resultType="cn.a.entity.Dept">
        select * from dept
    </select>
    <!-- 添加部门信息 -->
    <insert id="insertDept" parameterType="cn.a.entity.Dept">
        insert into dept values(2,#{deptName})
    </insert>
</mapper>

 

这里不再使用?占位,而是使用#{deptName}的形式

  编写测试类

 

/**
     * 添加部门信息
     */
    @Test
    public void insertDeptTest()
    {
        Dept dept=new Dept();
        dept.setDeptName("人力部");
        int insert = session.insert("cn.a.entity.Dept.insertDept",dept);
        System.out.println(insert);
        session.commit();
    }

 

在DB端的运行结果如下:

  技术分享

三.使用Mybatis修改数据,修改deptNo为2的部门,将deptName修改为测试部

因为我们上面第一个演示案例不用再重复之前的步骤,只需要将小配置文件修改以及将测试类代码修改即可

  Dept.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="cn.a.entity.Dept">
<!-- id:唯一标识:通过此id,程序可唯一锁定一条SQL 
     parameterType:参数类型
     resultType:结果类型
-->
    <!-- 查询所有部门信息 -->
    <select id="selectDept" resultType="cn.a.entity.Dept">
        select * from dept
    </select>
    <!-- 添加部门信息 -->
    <insert id="insertDept" parameterType="cn.a.entity.Dept">
        insert into dept values(2,#{deptName})
    </insert>
    <!-- 修改部门信息 -->
    <update id="updateDept" parameterType="cn.a.entity.Dept">
        update dept set deptName=#{deptName} where deptNo=#{deptNo}
    </update>
</mapper>

  测试类代码

/**
     * 修改部门
     */
    @Test
    public void updateDeptTest()
    {
        Dept dept=new Dept();
        dept.setDeptNo(2);
        dept.setDeptName("测试部");
        int update = session.update("cn.a.entity.Dept.updateDept",dept);
        System.out.println(update);
        session.commit();
    }

运行结果如下

技术分享

四.使用MyBatis删除数据,删除编号为2的部门

因为我们上面第一个演示案例不用再重复之前的步骤,只需要将小配置文件修改以及将测试类代码修改即可

  Dept.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="cn.a.entity.Dept">
<!-- id:唯一标识:通过此id,程序可唯一锁定一条SQL 
     parameterType:参数类型
     resultType:结果类型
-->
    <!-- 查询所有部门信息 -->
    <select id="selectDept" resultType="cn.a.entity.Dept">
        select * from dept
    </select>
    <!-- 添加部门信息 -->
    <insert id="insertDept" parameterType="cn.a.entity.Dept">
        insert into dept values(2,#{deptName})
    </insert>
    <!-- 删除部门信息 -->
    <delete id="deleteDept" parameterType="cn.a.entity.Dept">
        delete from dept where deptNo=#{deptNo}
    </delete>
    <!-- 修改部门信息 -->
    <update id="updateDept" parameterType="cn.a.entity.Dept">
        update dept set deptName=#{deptName} where deptNo=#{deptNo}
    </update>
</mapper>

  测试端代码

 

/**
     * 删除部门
     */
    @Test
    public void deleteDeptTest()
    {
        Dept dept=new Dept();
        dept.setDeptNo(2);
        int delete = session.delete("cn.a.entity.Dept.deleteDept",dept);
        System.out.println(delete);
        session.commit();
    }

运行结果如下

技术分享

五.模糊查询,查询部门名称带部字的信息

  Dept.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="cn.a.entity.Dept">
<!-- id:唯一标识:通过此id,程序可唯一锁定一条SQL 
     parameterType:参数类型
     resultType:结果类型
-->
    <!-- 查询所有部门信息 -->
    <select id="selectDept" resultType="cn.a.entity.Dept">
        select * from dept
    </select>
    <!-- 添加部门信息 -->
    <insert id="insertDept" parameterType="cn.a.entity.Dept">
        insert into dept values(2,#{deptName})
    </insert>
    <!-- 删除部门信息 -->
    <delete id="deleteDept" parameterType="cn.a.entity.Dept">
        delete from dept where deptNo=#{deptNo}
    </delete>
    <!-- 修改部门信息 -->
    <update id="updateDept" parameterType="cn.a.entity.Dept">
        update dept set deptName=#{deptName} where deptNo=#{deptNo}
    </update>
    <!-- 模糊查询 -->
    <select id="likeDept" resultType="cn.a.entity.Dept" parameterType="cn.a.entity.Dept">
        select * from dept where deptName like ‘%${deptName}%‘
    </select>
</mapper>

这里需要注意like后面跟的‘%${deptName}%‘

  测试类代码

 

/**
     * 模糊查询
     */
    @Test
    public void likeDeptTest()
    {
        Dept dept=new Dept();
        dept.setDeptName("部");
        List<Dept> selectList = session.selectList("cn.a.entity.Dept.likeDept", dept);
        for (Dept item : selectList) {
            System.out.println(item);
        }    
    }

 

运行结果如下

技术分享

 

以上是关于Mybatis的主要内容,如果未能解决你的问题,请参考以下文章

SSM-MyBatis-05:Mybatis中别名,sql片段和模糊查询加getMapper

mybatis动态sql片段与分页,排序,传参的使用

MyBatis动态SQL标签用法

MYBATIS05_ifwherechoosewhentrimsetforEach标签sql片段

mybatis动态sql之利用sql标签抽取可重用的sql片段

[mybatis]动态sql_sql_抽取可重用的sql片段