MyBatis之增删改查

什么是 MyBatis?

MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。 MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索。MyBatis 可以使用简单的XML 或注解用于配置和原始映射,将接口和 Java 的 POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。

Hibernate 与mybatis的区别

1. hibernate是全自动,而mybatis是半自动
hibernate完全可以通过对象关系模型实现对数据库的操作,拥有完整的JavaBean对象与数据库的映射结构来自动生成sql。而mybatis仅有基本的字段映射,对象数据以及对象实际关系仍然需要通过手写sql来实现和管理。

2. hibernate数据库移植性远大于mybatis。
hibernate通过它强大的映射结构和hql语言,大大降低了对象与数据库(oracle、MySQL等)的耦合性,而mybatis由于需要手写sql,因此与数据库的耦合性直接取决于程序员写sql的方法,如果sql不具通用性而用了很多某数据库特性的sql语句的话,移植性也会随之降低很多,成本很高。
3. hibernate拥有完整的日志系统,mybatis则欠缺一些。
hibernate日志系统非常健全,涉及广泛,包括:sql记录、关系异常、优化警告、缓存提示、脏数据警告等;而mybatis则除了基本记录功能外,功能薄弱很多。

4. mybatis相比hibernate需要关心很多细节
hibernate配置要比mybatis复杂的多,学习成本也比mybatis高。但也正因为mybatis使用简单,才导致它要比hibernate关心很多技术细节。mybatis由于不用考虑很多细节,开发模式上与传统jdbc区别很小,因此很容易上手并开发项目,但忽略细节会导致项目前期bug较多,因而开发出相对稳定的软件很慢,而开发出软件却很快。hibernate则正好与之相反。但是如果使用hibernate很熟练的话,实际上开发效率丝毫不差于甚至超越mybatis。

5. sql直接优化上,mybatis要比hibernate方便很多
由于mybatis的sql都是写在xml里,因此优化sql比hibernate方便很多。而hibernate的sql很多都是自动生成的,无法直接维护sql;虽有hql,但功能还是不及sql强大,见到报表等变态需求时,hql也歇菜,也就是说hql是有局限的;hibernate虽然也支持原生sql,但开发模式上却与orm不同,需要转换思维,因此使用上不是非常方便。总之写sql的灵活度上hibernate不及mybatis。

6. hibernate是手动开启事务,而mybatis是自动开启事务。注意在增,删,改时需要提交事务

MyBatis配置步骤

一.三拷:

  1. MyBatis开发包(mybatis-3.0.5-SNAPSHOT.jar)
  2. log4j
  3. jdbc驱动

二.src目录的配置

1.总的配置文件:SqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"
                       "mybatis-3-config.dtd">
<configuration>
    <environments default="dev">
        <environment id="MYSQL">
            <!-- 事物    回滚 rollback savepoint commit-->
            <transactionManager type="JDBC"></transactionManager>

            <dataSource type="UNPOOLED">
                <property name="username" value="root"/>
                <property name="password" value="admin"/>
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1/test"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/pojo/DepMap.xml"/>
    </mappers>
</configuration>

2.把pojo写好后,就写对应的_map.xml文件 (可以拷贝mybatis-3-mapper.dtd到需要配置_map.xml文件的同一个目录下,会有提示)

--以DepMap.xml配置为例,注意在总的配置文件注册一下

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper  
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" 
"mybatis-3-mapper.dtd">

<mapper namespace="com.pojo">

    <!-- 查询所有的部门 -->
    <select id="getall" resultType="com.pojo.Dep">
        select depid from dep 
    </select>
    <!-- 主键查找 -->
    <select id="findbyid" resultType="com.pojo.Dep" parameterType="int">
        select depid, depname from dep where depid = #{depid}
    </select>
    <!-- 区间查找 -->
    <select id="qujian" resultType="com.pojo.Dep" parameterType="map">
        select depid , depname from dep where depid between #{x} and #{y}
    </select>

    <!-- 区间2 -->
    <select id="qujian2" resultType="com.pojo.Dep" parameterType="map">
        select depid , depname from dep where depid <![CDATA[<]]> #{x} and depid <![CDATA[>]]> #{y}
    </select>

    <!-- 模糊查询  concat():用于连接两个或者多个数组     -->
    <select id="mohu" resultType="com.pojo.Dep">
        select depid , depname from dep where depname like concat('%' , #{depname} ) 
    </select>
    <!--更新-->
    <update id="updatedep" parameterType="com.pojo.Dep">
        update dep set depname = #{depname} where depid = #{depid}
    </update>
    <!--插入-->
    <insert id="insert" parameterType="com.pojo.Dep">
        <selectKey resultType="int" order="AFTER" keyProperty="depid">
        <!-- 为了解决insert数据库不支持主键自动生成问题      mysql after  oracle before -->
            select max(depid) from dep
        </selectKey>
        insert into dep(depid , depname) values(#{depid } , #{depname})
    </insert>
    <!--删除-->
    <delete id="del" parameterType="com.pojo.Dep">
        delete from dep where depid = #{depid}
    </delete>
</mapper>

修改、删除、添加只有parameterType(参数类型),没有resultType(返回类型)

3.测试一下,写一个测试类

--每个增删改的,前面几个步骤是一样的

public static void main(String[] args) throws IOException {
        //1.读取总的配置文件
        Reader reader=Resources.getResourceAsReader("SqlMapConfig.xml");
        //2.创建SessionFactory
        SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(reader,"MYSQL");
        //3.创建session
        SqlSession session=factory.openSession();

        //这个是查询所有的功能
        List<Dep> list=session.selectList("com.pojo.getall");
        for (Dep dep : list) {
            System.out.println(dep.getDepid()+"\t"+dep.getDepname());
        }
        -------------------------------------------
        //这个是根据主键查询所有的功能
        Dep dep = (Dep) session.selectOne("com.pojo.findbyid", 1);

        System.out.println(dep.getDepid() + "\t" + dep.getDepname());

} 

    -------------------------------------------
        //这个是根据区间查询的功能
        Map map = new HashMap();
        map.put("x", 1);
        map.put("y", 3);
        List<Dep> list = session.selectList("com.pojo.qujian", map);
        for (Dep dep : list) {
            System.out.println(dep.getDepid() + "\t" + dep.getDepname());
        }


-------------------------------------------其他的就省略了
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值