Mybatis(一)

为什么使用MyBatis?

目前使用开发遇到的问题

        A、每一个操作对应的使用Dao中的方法,每一个方法中都需要连接数据库,这样我们连接数据库的代码就需要写好多次

        B、如果我们做的是查询的操作,从rs中取值是一个比较麻烦,而且影响开发效率的问题

解决方案:

        (1)提取DBUtil工具类即可

            优点:不用在每一次书写连接数据库的操作

            缺点:传统的JDBC连接数据库的效率非常慢

         (2)使用数据库连接池连接数据库

             优点:连接数据库的速度比较快

             缺点:没有办法实现SQL语句和java代码之间的解耦 

        (3)使用MyBatis框架

              作用:[1]解决了SQL语句和java代码之间的耦合

                     [2]连接数据库的效率也比较快

                     [3]取值问题就会变得非常的简单  


Mybatis使用:
1、导入mybatis核心包及其依赖还有mysql驱动包,在module下创建一个lib目录来存放项目所需jar包

2、书写配置mybatis.xml

①在src下创建mybatis.xml文件

②在xml文件中添加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">

 ③填写mybatis.xml配置信息【只介绍最重要的部分,很多细节太多,自主看chm文档】

<?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="mysql">
         <!--default中填写所配置的environment的id,
         表示默认使用的数据库环境,
         可以有多个<environment>标签 -->
         <!-- environment 元素体中包含对事务管理和连接池的环境配置。 
        -->
         <!--MySQL数据库连接-->
         <environment id="mysql">
             <!--MyBatis中的事务管理,type有两种取值,
             填写JDBC表示目前的事务管理和JDBC中的事务保持一致,
             还有一种是 MANAGED  表示MyBatis不去管理事务,交给其他容器进行管理 -->
             <transactionManager type="JDBC"></transactionManager>
             <!--底层使用连接池连接数据库-->
             <!--type有三种取值:
                ①POOLED使用连接池技术. 访问频率比较高时使用.
                连接池的使用可以降低服务器压力,提高连接对象重用性,跟数据库连接池原理一样
                通过连接池先和数据库进行连接,当使用时从连接池中拿取连接,降低连接时间
                ②UNPOOLED不使用连接池技术.每次对数据库访问时打开数据库连接,
                访问结束后关闭数据库连接. 
                ③JNDI : java命名目录接口.数据库的连接可以依赖于其他技术或应用. 
-->
             <!--dataSource 元素使用基本的 JDBC 数据源接口来配置 JDBC 连接对象的资源-->
             <dataSource type="POOLED">

                 <property name="driver" value="com.mysql.cj.jdbc.Driver"></property>
                 <property name="url" value="jdbc:mysql://localhost:3306/mybatis2?characterEncoding=utf8&amp;useSSL=false&amp;serverTimezone=GMT%2B8"></property>
                 <property name="username" value="root"></property>
                 <property name="password" value="root"></property>

             </dataSource>
         </environment>

         <!--ORCL数据库-->
        <!-- <environment id="orcl">
             <transactionManager type=""></transactionManager>
             <dataSource type=""></dataSource>
         </environment>-->

     </environments>
    <!--进行mapper文件的扫描-->
    <mappers>
        <!--resource:书写的是XML所在的目录-->
        <!--告诉mybatis上哪去找sql映射文件-->
        <!--mapper常用属性,两个
        ①resource="com/bjsxt/xxx.xml" 加载项目中资源文件 ,使用相对路径的
        ②url="" 加载互联网或本机的配置文件,使用绝对路径的
       <mapper url="file:///E:/FlowerMapper.xml"/>
        -->
        <mapper resource="com/bjsxt/mapper/FlowerMapper.xml"></mapper>

    </mappers>

</configuration>

3、配置mapper.xmlSQL映射文件,注意该文件的头部声明文件和mybatis.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="com.sw.mapper.FlowerMapper">
    <!-- namespace 随便写
    但是规范一点的写法是,在namespace填写xml文件在src下的路径    
-->
    <!--
        List<Flower>  selectAll();

       id:方法名称

       resultType:返回值类型

            查询返回的时候一般不是对象就是集合

            如果返回值是一个对象,就写对象所在包的全路径

            如果返回值是一个集合,这个时候书写集合的泛型类的全路径
    -->

     <select id="selectAll" resultType="com.bjsxt.entity.Flower">

          SELECT   *  from   flower 

     </select>

</mapper>

测试代码Test:

public class TestA {
    public static void main(String[] args) throws IOException {

        //解析XML文件
        InputStream stream = Resources.getResourceAsStream("mybatis.xml");
        //获得session工厂
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(stream);

        //获得session对象
        SqlSession session = factory.openSession();

        //调用方法,selectList中填写方法的全路径
        List<Flower> list = session.selectList("com.sw.mapper.FlowerMapper.selectALL");
        System.out.println(list);
        //关闭资源
        session.close();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Meikesibondwell

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值