美文网首页
JAVAWEB(四)mybatis规范化的结构目录

JAVAWEB(四)mybatis规范化的结构目录

作者: 文子轩 | 来源:发表于2018-07-06 12:40 被阅读20次

    一ORM型框架

    ORM:Object Relation Mapping:对象关系映射,通俗理解就是将一个对象相关属性和数据库数据进行关联(映射),传统我们对数据库数据 的操作可以通过ORM框架转移到对对象的操作上来,这无疑有利于提高程序的开发效率和项目的可维护性,本质是对传统的JDBC操作高级封装
    工作流程:mybatis通过sqlSessionFactory创建sqlSession,
    sqlSession表示应用程序与数据库的会话,当用户使用mapper.xml文件中配置的的方法时,mybatis首先会解析sql动态标签为对应数据库sql的形式,并将其封装进MapperStatement对象,然后通过executor将sql注入数据库执行,并返回结果
    常见ORM框架:hibernate、mybatis

    mybatis主要通过两个配置文件(sqlMapConfig.xml和Mapper.xml),来配置数据库和对象的关系

    sqlMapConfig.xml:

    Mybatis的全局配置文件,主要配置mybatis的环境参数、映射对象运行参数。
    mybatis的环境参数:数据源配置、事务控制
    映射对象运行参数:映射对象的别名设置、映射对象配置文件加载

    二 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>
    
    <!-- 加载数据库属性文件:db.properties -->
    <properties resource="db.properties"/>
    
    <!-- 
     typeAliases:别名设置
     package:mybatis自动扫描polo类,自动创建别名(类型名)
     -->
    <typeAliases>
       <typeAlias type="com.zhiwei.domain.User" alias="user"/>
       <package name="com.zhiwei.domain" />
    </typeAliases>
    
    <!-- 和spring整合environment配置将抛弃 -->
    <environments default="development">
    <environment id="development">
    
    <!-- 使用jdbc事务管理 -->
    <transactionManager type="JDBC"/>
    
    <!-- 数据连接池 :mybatis管理-->
    <dataSource type="POOLED">
    <property name="driver" value="${jdbc.driver}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.user}"/>
    <property name="password" value="${jdbc.password}"/>
    </dataSource>
    </environment>
    </environments>
    
    <!-- 加载映射文件
         resource:每次只能加载一个文件
         class:只能mapper代理对象执行(mapper接口名和mapper.xml文件名一致,并且在同一个目录)
         package:批量加载:name为mapper文件所在的包名
     -->
    <mappers>
       <mapper resource="com/zhiwei/domain/UserMapper.xml"/>
    </mappers>
    </configuration>
    

    三mapper.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">
    
    <!-- namespace命令空间:sql访问地址划分 -->
    <mapper namespace="test">
    <!-- 映射文件配置sql语句 :select执行数据库查询
    id:sql语句封装mappedStatement的id
    #{id}:占位符,表示接受输入的参数:id,如果输入参数类型为简单类型,
    #{}中的参数名可以任意,
    resultType:返回结果类型
    -->
    <select id="findUserById" parameterType="int"     resultType="user">
    select *from user where id=#{id}
    </select>
    
    <delete id="deleteUserById" parameterType="int">
    delete from user where id=#{id}
    </delete>
    
    <!-- 如果输入的参数为pojo类型,占位符名称使用pojo的属性 -->
    <update id="updateUser"   parameterType="com.zhiwei.domain.User">
    update  user set name=#{name},passwd=#{passwd} where id=#{id}
    </update>
    
    <insert id="addUser" parameterType="com.zhiwei.domain.User">
    insert into user(id,name,passwd) values(#{id},#{name},#    {passwd})
    </insert>
    </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">
    
    <!-- namespace命令空间:sql访问地址划分 -->
    <mapper namespace="test">
    <!-- 映射文件配置sql语句 :select执行数据库查询
    id:sql语句封装mappedStatement的id
    #{id}:占位符,表示接受输入的参数:id,如果输入参数类型为简单  类型,
    #{}中的参数名可以任意,
    resultType:返回结果类型
    -->
    <select id="findUserById" parameterType="int"     resultType="user">
    select *from user where id=#{id}
    </select>
    
    <delete id="deleteUserById" parameterType="int">
    delete from user where id=#{id}
    </delete>
    
    <!-- 如果输入的参数为pojo类型,占位符名称使用pojo的属性 -->
    <update id="updateUser" parameterType="com.zhiwei.domain.User">
    update  user set name=#{name},passwd=#{passwd} where id=#{id}
    </update>
    
    <insert id="addUser"   parameterType="com.zhiwei.domain.User">
    insert into user(id,name,passwd) values(#{id},#{name},#{passwd})
    </insert>
    </mapper>
    

    五 工具类

    package com.zhiwei.tool;
    
    import java.io.IOException;
    import java.io.InputStream;
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
        /**
     * Mybatis工具类
     * @author Yang Zhiwei
     */
    public final class MybatisTool {
    
    private static InputStream is=null;
    private static SqlSession sqlSession=null;  
         
       /**
         * 获取Mybstis SqlSession会话
         * @return
         */
    public static SqlSession getSession(){
    
     try {
        is=Resources.getResourceAsStream("SqlMapConfig.xml");
    } catch (IOException e) {
        e.printStackTrace();
    }
    
    /**本质通过调用DefaultSqlSessionFactory创建sqlSession
     *DefaultSqlSession:与数据库进行JDBC操作的类
     *   MappedStatement:与JDBC操作的StateMent类类似,封装sql信息,
     *   mybatis的动态sql标签在提交给数据库之前会进行sql的规范化,控制台日志显示
     *   executor:真正和数据库进行交互的执行者
     *   configuration:mybatis配置文件信息的封装类
     *部分源码:
     *   @Override
          public int update(String statement, Object parameter) {
            try {
              dirty = true;
              MappedStatement ms = configuration.getMappedStatement(statement);
              return executor.update(ms, wrapCollection(parameter));
            } catch (Exception e) {
              throw ExceptionFactory.wrapException("Error updating database.  Cause: " + e, e);
            } finally {
              ErrorContext.instance().reset();
            }
          }
     *   
     * */
    //通过mybatis的控制文件创建sqlSessionFactory
    SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(is);
    sqlSession=sqlSessionFactory.openSession(); 
    return sqlSession;
    }
    
    /**
     * 关闭mybatis SqlSession会话
     */
    public static void resourceClosing(){
        try{
        if(sqlSession!=null){
            sqlSession.close();
        }
        if(is!=null){
           is.close();
        }
        }catch (Exception e) {
            e.printStackTrace();
        }
      }
     }
    

    六 对象接口实现的类

    package com.zhiwei.service;
    
    import org.apache.ibatis.session.SqlSession;
    
    import com.zhiwei.domain.User;
    import com.zhiwei.tool.MybatisTool;
    
    /***
     * 基础服务类
     * @author Yang Zhiwei
     */
    public  class BasicServiceImp{
    
    private static SqlSession sqlSession=null;
    
    //SqlSession初始化
    static{
        sqlSession=MybatisTool.getSession();
    }
    
    /**
     * 通过Id查询用户信息
     * test:表示命名空间  
     * findUserById:mapper.xml文件的动态sql id
     * test.findUserById:指明访问动态sql地址--->对应:<mapper namespace="test">
     * @param id
     * @return
     */
        public static User findUserById(int id) {
        return sqlSession.selectOne("test.findUserById", id);
    }
    
    /**
     * 更新用户信息
     * @param user
     */
    public static void updateUser(User user) {
        sqlSession.update("test.updateUser",user);
        sqlSession.commit();
        MybatisTool.resourceClosing();
    }
    
    /**
     * 删除用户信息
     * @param id
     */
    public static void deleteUserById(int id) {
        sqlSession.delete("test.deleteUserById", id);
        sqlSession.commit();
        MybatisTool.resourceClosing();
    }
    
    /**
     * 添加用户信息
     * @param user
     */
    public static void addUser(User user) {
        sqlSession.insert("test.addUser",user);
        sqlSession.commit();   
        MybatisTool.resourceClosing();
        }
    }
    

    七测试执行类

    package com.zhiwei.test;
    
    import com.zhiwei.domain.User;
    import com.zhiwei.service.BasicServiceImp;
    
    public class BasicTest {
    
    public static void main(String[] args) {
    
        User user=BasicServiceImp.findUserById(1);
        System.out.println(user);
    }
    }

    相关文章

      网友评论

          本文标题:JAVAWEB(四)mybatis规范化的结构目录

          本文链接:https://www.haomeiwen.com/subject/kebvuftx.html