Day1 Mybatis初识(一)详解编程语言

框架

将重复的,繁琐的代码实现封装,让程序员将更多的精力放在业务的理解和分析上。

框架的作用

提高开发效率

隐藏细节

三大框架SSH  –>   SSM

1)        表述层:   用户交互   servlet        SpringMVC/Struts2

2)        业务逻辑层:业务处理  javabean/ejb   Spring

3)        数据持久层:数据库交互 jdbc          Mybatis/Hibernate

传统JDBC的不足

1)        四个参数的使用有硬编码(配置文件)

2)        statement的使用中有硬编码

3)        频繁打开和关闭连接(数据源(连接池))

Mybatis框架

MyBatis 是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。

Mybatis是一个优秀的ORM框架

ORM:Object Relationship Mapping(对象关系映射) 

Mybatis不需要开发人员过多关注数据库的连接关闭,stmt对象的创建;着重关注sql

关注映射: 输入参数  和 输出结果

1) mybatis下载

apache ibatis前身。

google code  à Mybatis

github

2) https://github.com/mybatis/mybatis-3/releases

Mybatis的开发

1)配置文件   (xml)

  a)xfg.xml:核心配置文件(全局配置文件)

     连接信息的配置(连接池),事务管理

  b) mapper.xml:映射文件

2) SqlSessionFactory:session工厂

3)SqlSession:面向程序员的接口(增删改查)

4)搭建

a) 创建java项目,导入jar

Day1 Mybatis初识(一)详解编程语言

b)配置核心配置文件(xml)

核心配置文件:

<!-- DTD:定义/约束 --> 
<!DOCTYPE configuration 
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 
  "http://mybatis.org/dtd/mybatis-3-config.dtd"> 
  <!-- Mybtais核心配置文件:任何的地方都可以获取 --> 
<configuration> 
    <!-- environments:环境集合(mysql/oracle) 
               default:默认(环境的id) 
     --> 
  <environments default="development"> 
      <!-- environment:代表一个环境 
              id:唯一标识 
           transactionManager:事务管理器(管理事务) 
               type:jdbc 
           dataSource:数据源(连接池) 
            连接池:当项目启动,向数据库请求初始化连接数条连接放置在连接池中管理; 
                 当连接的请求多于初始化连接数,此时会根据步长来增加连接数(创建连接); 
                 最大不超过最大连接数,人就不够时需要根据超时时间进行等待; 
                 当连接的请求远低于当前的连接数,此时会根据最小连接数释放相应的连接。 
                 好处:减少了连接的频繁关闭。 
                 缺点:连接需要占用资源 
                必须配置四个参数     driver  url  username  password 
                流行的数据源:DBCP   C3P0   DROID 
                 
           type="POOLED"("池") 
       --> 
    <environment id="development"> 
      <transactionManager type="JDBC"/> 
      <dataSource type="POOLED"> 
        <property name="driver" value="com.mysql.jdbc.Driver"/> 
        <property name="url" value="jdbc:mysql:///bd1711"/> 
        <property name="username" value="root"/> 
        <property name="password" value="root"/> 
      </dataSource> 
    </environment> 
     
  </environments> 
   
  <!-- 映射器   --> 
  <mappers> 
    <mapper resource="BookMapper.xml"/> 
  </mappers> 
</configuration>

mapper映射文件

<!DOCTYPE mapper 
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 
  <!--  
       mapper:描述对象和记录之间的映射关系 
               namespace:隔离sql,在mapper代理时由特殊用法 
   --> 
<mapper namespace="com.lee"> 
 
   <!--  查询的映射:  (Statement对象)  
               id:该标签的唯一标识 
               resultType:结果类型 (输出结果的映射)  
               #{}:代表占位符  
               parameterType:输入参数类型(输入参数的映射)(可省略) 
   --> 
  <select id="selectBook" resultType="entity.Book"> 
    select * from book where bid = #{bid} 
  </select> 
 
</mapper>

测试代码

//加载配置文件为流 
            InputStream is = Resources.getResourceAsStream("Mybatis.xml"); 
            //创建SqlSessionFactory(加载) 
            SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(is); 
            //核心接口(发送增删改查语句)  
            SqlSession session = ssf.openSession(); 
             
            Book book = session.selectOne("com.lee.selectBook", 1); 
            System.out.println(book); 
             
            //释放资源 
            session.close();

配置详解

核心配置文件

    properties 
<!-- 1.配置(动态替换)  
            1.1 java的属性文件外部引入   resource="jdbc.properties" 
            1.2 property标签中配置 
             
            当两者冲突时,最终使用java的属性文件的配置。 
       --> 
    <properties resource="jdbc.properties"> 
        <!--  <property name="driver" value="com.mysql.jdbc.Driver"/> -->  
    </properties> 
    settings 
<!--2.settings 调整:影响整个Mybatis的行为  --> 
    <settings> 
        <!--  缓存总开关:  默认true,开启缓存    /  false关闭缓存  --> 
        <setting name="cacheEnabled" value="true"/> 
        <!-- 延迟加载总开关:   默认false,默认是立即加载   /  true延迟加载 --> 
        <setting name="lazyLoadingEnabled" value="true"/> 
    </settings> 
    typealiases 
<!-- 3.别名 
        typeAlias:单一类型起别名 
            type:需要设置别名的全限定名称 
            alias:别名 
        package:包       
            默认别名就是类型(首字母大小写均可) 
     --> 
    <typeAliases> 
        <!-- <typeAlias type="entity.Book" alias="book"/> --> 
        <package name="entity"/> 
    </typeAliases> 
    typeHandlers: 
类型处理器 
    objectFactory:对象工厂 
    enviroment 
<environment id="development"> 
        <!-- 事务管理器:  
            JDBC: 和JDBC使用同样的提交和回滚策略 
            MANAGED:依赖于应用服务器上下文(context)的配置(必须在服务器上运行) 
        --> 
      <transactionManager type="JDBC"/> 
      <!-- 数据源:      c3p0,droid 
              UNPOOLED:请求时连接,完毕时关闭 
              POOLED:连接池 
              JNDI:依赖于应用服务器(在上下文配置数据源,然后在java获取上下文的引用从而获取数据源) 
       --> 
      <dataSource type="POOLED"> 
        <property name="driver" value="${db.driver}"/> 
        <property name="url" value="${db.url}"/> 
        <property name="username" value="${db.user}"/> 
        <property name="password" value="${db.pwd}"/> 
      </dataSource> 
    </environment> 
    mappers 
<!-- 映射器   :作用  寻找映射文件,sql--> 
  <mappers> 
      <!-- 1.相对于src映射文件的相对路径  --> 
    <mapper resource="BookMapper.xml"/> 
    <!-- 2.url:全路径 --> 
    <!-- 3.class:使用mapper接口的class --> 
    <!-- 4.package:注册整个包下所有的文件(mapper代理开发) --> 
  </mappers>

映射文件

<!-- 1.使用二级缓存  --> 
    <cache></cache> 
    <!-- 2.引用其他命名空间缓存  --> 
    <cache-ref namespace=""/> 
 
<!-- 3.实现复杂的类型封装 --> 
    <resultMap type="" id=""></resultMap> 
 
<!-- 4.可被重用的语句块  --> 
    <sql id="bookCols"> 
        bid,bname,author,price 
    </sql> 
 
查询:  select   (查询一个,查询所有,模糊查询,分页查询) 
<!-- 模糊查询  :缺陷  有sql注入的风险     /  但是使用不同字段作排序时必须使用    --> 
  <select id="selectLike" resultType="book"> 
      select * from book where bname like '%${value}%' 
  </select> 
   
  <!-- 分页查询 
      1.编写类 
      2.map 
      3.rowbounds 
   --> 
  <select id="selectByPage"  resultType="book" parameterType="map"> 
      select * from book limit #{startRow},#{length} 
  </select> 
   
  <select id="selectByPage2"  resultType="book"> 
      select * from book 
  </select> 
 
 
增删改:insert   update   delete 
   主键返回 
    <!-- 插入 
          主键返回(用于建立多表之间的关系) 
   --> 
  <insert id="insertBook" parameterType="book" useGeneratedKeys="true" keyProperty="bid"> 
     insert into book(bname,author,price) values(#{bname},#{author},#{price}) 
  </insert> 
   
  <insert id="insertBook2" parameterType="book"> 
      <selectKey keyProperty="bid" order="AFTER" resultType="int"> 
          <!-- select LAST_INSERT_ID() --> 
          <!-- select SEQ_BOOK.nextval from dual --> 
      </selectKey> 
     insert into book(bname,author,price) values(#{bname},#{author},#{price}) 
  </insert>

Eclipse导入本地dtd约束

Day1 Mybatis初识(一)详解编程语言

 

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/11141.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论