Mybatis - 配置 - 示例

Mybatis可以简化JDBC操作,实现数据的持久化

ORM:Object Relational Mapping 建立对象与表的映射关系(对象名与表名;对象属性与表中字段 一 一映射)
ORM:是一个概念,Mybatis是ORM的一个实现/Hibernate
ORM可以使得开发人员像操作对象一样操作数据库表

为什么要使用MyBatis?

• MyBatis是一个半自动化的持久化层框架。
• JDBC – SQL夹在Java代码块里,耦合度高导致硬编码内伤 – 维护不易且实际开发需求中sql是有变化,频繁修改的情况多见
• Hibernate和JPA – 长难复杂SQL,对于Hibernate而言处理也不容易 – 内部自动生产的SQL,不容易做特殊优化。 – 基于全映射的全自动框架,大量字段的POJO进行部分映射时比较困难。 导致数据库性能下降。

• 对开发人员而言,核心sql还是需要自己优化 • sql和java编码分开,功能边界清晰,一个专注业务、 一个专注数据。

MyBatis开发步骤:

配置Mybatis

conf.xml:配置数据库信息,和 需要加载的映射文件
<environments 中的default属性: 决定配置文件使用的是那一个配置信息(配置信息可以有多个)

1.创建MyBatis全局配置文件(conf.xml)

– MyBatis 的全局配置文件包含了影响 MyBatis 行为甚深 的设置(settings)和属性(properties)信息、如数据 库连接池信息等。指导着MyBatis进行工作。可以 参照官方文件的配置示例。

<?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值和environment的id来指定MyBatis运行时的数据库环境-->
    <properties resource="db.properties"></properties>
    <settings>
        <!--开启日志,并指定使用的具体日志-->
        <setting name="logImpl" value="LOG4J"/>
        <!--开启延迟加载-->
        <setting name="lazyLoadingEnabled" value="true"/>
        <!--关闭立即加载-->
        <setting name="aggressiveLazyLoading" value="false"/>
        <!--开启二级缓存-->
       <setting name="cacheEnabled" value="true"/>
    </settings>
    <!--设置别名-->
    <typeAliases>
        <!--设置单个别名(大小写不所谓)-->
        <typeAlias type="entity.Person" alias="Person"></typeAlias>
        <!--批量设置别名(会将包下的所有类的名字定义为它的别名 即别名就是类名)-->
        <package name="entity"/>
    </typeAliases>
    
    <typeHandlers>
        <typeHandler handler="convertor.BooleanAndIntConvertor" javaType="Boolean" jdbcType="INTEGER"></typeHandler>
    </typeHandlers>

    <environments default="development">
        <!--本台计算机上的环境配置-->
        <environment id="development">
            <!--事务提交方式:
                JDBC:利用JDBC方式处理事务(commit,rollback,close)
                MANAGED:将事务交由其他组件去托管(Spring,jobss)默认会关闭连接
            -->
            <transactionManager type="JDBC"/>
            <!--数据库类型
                UNPOOLED:传统的JDBC模式(每次访问数据库都需要打开,关闭数据库资源)
                POOLED:使用数据库连接池
                JNDI:从tomcat中获取一个内置的数据库连接池(数据库连接池)
            -->
            <dataSource type="POOLED">
                <!--配置数据库信息-->
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>

        <!--部署的项目的计算机的环境配置-->
        <environment id="deploy">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!--配置数据库信息-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/person"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>

        <!--测试项目的计算机的环境配置-->
        <environment id="test">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!--配置数据库信息-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/person"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--加载映射文件-->
        <mapper resource="mapper/PersonMapper.xml"/>
        <mapper resource="mapper/PersonMapper2.xml"/>
        <mapper resource="mapper/PersonMapper3.xml"/>
    </mappers>
</configuration>

模板

<?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">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!--配置数据库信息-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/person"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--加载映射文件-->
<mapper resource="entity/PersonMapper.xml"/>
</mappers>
</configuration>

2.创建SQL映射文件(xxxMapper.xml)

– 映射文件的作用就相当于是定义Dao接口的实现类如何 工作。这也是我们使用MyBatis时编写的最多的文件。

<?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:该mapper.xml映射文件的唯一标识-->
<mapper namespace="entity.PersonMapper">
    <!--唯一标识符+id定位sql语句
        parameterType:参数类型:
        resultType: 查询返回类型
        参数类型和返回类型,mybatis约定在形式上都只能有一个,多参数可以使用数组
        如果输入参数:是简单类型(8个基本类型+String) 是可以使用任何占位符#{xxx}
        如果输入参数是对象类型,则必须是对象的属性#{属性名}
        输出参数: 如果返回值类型是一个对象,则无论返回一个还是多个,resultType只要写其全类名即可
        //事务方式是JDBC,事务要手动提交 sqlSession.commit();
    -->
    <select id="queryPersonById" resultType="entity.Person" parameterType="int">
        SELECT * FROM person WHERE id = #{id}
    </select>
    <insert id="PersonInsert"  parameterType="entity.Person">
        INSERT INTO person(name,age) VALUES(#{name},#{age})
    </insert>

    <delete id="PersonDelete" parameterType="int">
        DELETE FROM person WHERE id = #{id}
    </delete>

    <update id="PersonUpdate" parameterType="entity.Person">
        UPDATE person SET name=#{name},age=#{age} WHERE id = #{id}
    </update>

    <select id="queryAll" resultType="entity.Person">
        SELECT * FROM person WHERE id > 0
    </select>
</mapper>

模板

<?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="entity.PersonMapper">
<select id="queryPersonById" resultType="entity.Person" parameterType="int">
SELECT * FROM person WHERE id = #{id}
</select>
</mapper>

简单示例

一个 SqlSession对象代表和数据库的一次会话。

使用SqlSession根据方法id进行操作

如果是插入修改操作,要手动提交!

    public void test() throws IOException {
        //加载Mybatis配置文件(为了访问数据库)
        Reader reader = Resources.getResourceAsReader("conf.xml");
        //SqlSessionFactory,可以通过built的第二个属性指定id值
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        //session - 相当于JDBC中的Connection
        SqlSession session = sessionFactory.openSession();

        String statement = "entity.PersonMapper.queryPersonById";
        Person person = session.selectOne(statement,1);
        session.close();
        System.out.println(person);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值