Mybaties初始

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());
       
    }

猜你喜欢

转载自www.cnblogs.com/hx1098/p/9350498.html