zoukankan      html  css  js  c++  java
  • Mybatis初始

    1.Mybatis 的作用
    完成基本的sql语句 和 存储过程 高级的对象关系映射(ORM) 框架
    封装了几乎所有的 JDBC 代码 参数的手工设置 结果集的遍历

    2.Mybatis 框架的主体构成
         实体类 用来封装数据
         SQL定义文件 定义sql语句的
         主配置文件 配置连接数据库信息 和 加载SQL定义文件
         框架API 通过SqlSession 来完成对应的功能。

    3.Mapper 映射器的规则  (Mapper映射器的意思是 可以根据接口 自动生成实现类)

    3.1 接口中的方法名 和 Mapper 文件中 id 保持一致
    32 接口方法的参数 和 parameterType 保持一致 如果没有 parameterType
    则参数可以根据实际情况自由设计。
    3.3 方法的返回值 和 resultType 尽量一致
    如果select 最多返回一个值 则 resultType 保持完全一致
    如果select 可能返回 多个值 则返回 List<resultType>
    DML(insert delete update) 可以设计成void 也可以返回 int
    3.4 Mapper文件 中 namespace 必须是 包名.接口名

    4.为了简化 类型的编写 可以给类型起别名
    <configuration>
    <typeAliases>
    <typeAlias type="com.xdl.bean.XdlBankAccount" alias="account"/>
    </typeAliases>
    5. 当数据库中的字段名 和 bean 的属性名不一致时如何处理?
         5.1 通过给数据库中的字段 起别名来解决
        5.2 使用 resultMap 来 指定数据库字段 和 bean 中属性的对应关系

    下面说一下Mybaties的变成步骤:

    首先还是导入Mybaties.jar,和Ojdbc的包,

    拷贝一个slqMapper配置文件到类路径下:

    <?xml version="1.0" encoding="UTF-8" ?> 
     <!DOCTYPE configuration  PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"            "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
    <configuration>
        <!-- typeAliases开启别名标注 -->
        <typeAliases>
            <typeAlias type="cn.com.bean.BankAccount" />
        </typeAliases>
    
        <environments default="environment">
            <environment id="environment">
                <transactionManager type="JDBC" />
                <dataSource type="POOLED">
                    <property name="driver" value="oracle.jdbc.OracleDriver" />
                    <property name="url" value="jdbc:oracle:thin:@localhost:1521:XE" />
                    <property name="username" value="scott" />
                    <property name="password" value="tiger" />
                </dataSource>
            </environment>
        </environments>
        <mappers>
            <mapper resource="cn/com/mapper/AccountMapper.xml" />
        </mappers>
    </configuration> 

    创建一个映射包,cn.com.mapper,并创建一个账户的映射,用于存储sql语句

    <?xml version="1.0" encoding="UTF-8" ?>  
    <!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"      
     "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
    
    <mapper namespace="cn.com.Dao.BankAccountDAO"><!-- 命名空间必须和包名,类名相同 -->
        <!-- 定义SQL语句 -->
    
        <select id="findAccountById" parameterType="int"
            resultType="cn.com.bean.BankAccount">
            select * from XDL_BANK_ACCOUNT where id=#{n}
        </select>
    
        <select id="findCount" resultType="int">
            select count(*) from
            XDL_BANK_ACCOUNT
        </select>
    
        <select id="findAccountByNo" parameterType="java.lang.String"
            resultType="cn.com.bean.BankAccount">
            select * from XDL_BANK_ACCOUNT where acc_no=#{n}
        </select>
    
        <select id="findAccountByName" parameterType="cn.com.bean.BankAccount"
            resultType="cn.com.bean.BankAccount">
            select * from XDL_BANK_ACCOUNT where acc_no = #{acc_no} and
            acc_password = #{acc_password}
        </select>
    
        <select id="findAccountGtId" parameterType="int"
            resultType="cn.com.bean.BankAccount">
            select * from XDL_BANK_ACCOUNT where id > #{id}
        </select>
    
        <select id="findAccountMinId" parameterType="int"
            resultType="cn.com.bean.BankAccount">
            select * from XDL_BANK_ACCOUNT where id &lt; #{id}
    
        </select>
    
        <select id="findAccountMinId2" parameterType="int"
            resultType="cn.com.bean.BankAccount">
            select * from XDL_BANK_ACCOUNT where id <![CDATA[<]]>
            #{id}
        </select>
    
        <!-- 定义一个插入语句 -->
        <insert id="insertAccount" parameterType="cn.com.bean.BankAccount">
            insert into
            XDL_BANK_ACCOUNT values
            (XDL_BANK_ACCOUNT_ID_SEQ.nextval,#{acc_no},#{acc_password},#{acc_money})
        </insert>
    
        <delete id="deleteAccouontById" parameterType="int">
            delete from
            XDL_BANK_ACCOUNT where id=#{id}
        </delete>
    
        <update id="updateAccountById" parameterType="cn.com.bean.BankAccount">
            update
            XDL_BANK_ACCOUNT set
            acc_no=#{acc_no},acc_password=#{acc_password},acc_money=#{acc_money}
            where id=#{id}
        </update>
    
        <!-- 根据账号和密码查询银行账户 -->
        <select id="getAccountByAccNOAndPassword" resultType="cn.com.bean.BankAccount">
            select *
            from XDL_BANK_ACCOUNT where acc_no=#{param1} and
            acc_password=#{param2}
        </select>
    
        <!-- <select id="getAccountByAccNOAndPassword2" resultType="cn.com.bean.BankAccount"> 
            selsect * from XDL_BANK_ACCOUNT where acc_no=#{param1} and acc_password=#{param2} 
            </select> -->
    
    
    
        <!-- 如果类型中的名字不相同 -->
        <resultMap type="cn.com.bean.BankAccount2" id="account2">
            <result column="id" property="acc_id" />
        </resultMap>
        <select id="getAccountByAccNOAndPassword2" resultMap="account2">
            select * from XDL_BANK_ACCOUNT where acc_no=#{param1} and acc_password=#{param2}
        </select>
    </mapper>

    这里面的特殊字符如大于号,小于号需要特殊处理:

    &lt;           < 小于号         
    &gt; >               大于号
    &amp; &
    &apos;  ’ 单引号
    &quot;  " 双引号

    或者:

    因为这个是xml格式的,所以不允许出现类似“>”这样的字符,但是都可以使用<![CDATA[ ]]>符号进行说明,将此类符号不进行解析 
    你的可以写成这个: 

    mapper文件示例代码
    <![CDATA[ when min(starttime)<='12:00' and max(endtime)<='12:00' ]]>

    接着上面的说,再写一个dao接口:

    public interface BankAccountDAO {
        BankAccount findAccountById(int id);
        
        int updateAccountById(BankAccount acc);
        
        List<BankAccount> findAccountGtId(int id);
        
        BankAccount getAccountByAccNOAndPassword(String acc_no,String acc_password);
        
        BankAccount getAccountByAccNOAndPassword2(String acc_no,String acc_password);
        
        
    }

    写一个工具类,以便后期我们创建SqlSession使用,

    public class SqlSessionUtil {
        private static SqlSessionFactory ssf = null;
        static {
            SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
            InputStream inputs = BankSessionTest.class.getClassLoader().getResourceAsStream("sqlmap-config.xml");
            ssf = ssfb.build(inputs);
        }
    
        public static SqlSession getSqlSession() {
            return ssf.openSession();
        }
    }

    好了,开始测试:

     public static void main(String[] args) {
            
            BankAccountDAO dao=new BankAccounDaoIMP();
            /*BankAccount acc=dao.findAccountById(46);
            System.out.println(acc);*/
        /*    
            int updateAccountById = dao.updateAccountById(new BankAccount(9, "han", "21345", 88888));
            System.out.println(""+updateAccountById);*/
            
            /*BankAccount accountd = dao.getAccountByAccNOAndPassword("1111", "2222");
            System.out.println(accountd.toString());
            */
    //        BankAccount accountBy = dao.getAccountByAccNOAndPassword2("1111", "2222");
    //        System.out.println(accountBy.toString());
            BankAccount account = dao.getAccountByAccNOAndPassword2("1111", "2222");
            System.out.println(account.toString());
           
        }
  • 相关阅读:
    0.1+0.2==0.3?
    Tomcat 初探(三)多项目部署
    Tomcat 初探(二) server.xml 配置
    Tomcat 初探(一) 简介
    如何使用 Idea 远程调试 Java 代码
    js-将时间戳转为正常的日期
    VUE-基本的写法
    HTML-列表无缝滚动效果2(显示一个暂停3秒,滚走显示下一个)
    JS-判断用户使用的终端是安卓还是IOS
    JS-在本页面监听是否用户是点击了返回进入的(IOS返回页面时,页面未初始化)
  • 原文地址:https://www.cnblogs.com/hx1098/p/9350498.html
Copyright © 2011-2022 走看看