• iBatis的基本使用


    项目结构:

    依赖jar:

    数据库依赖:

     1 CREATE TABLE `person` (
     2   `id` int(11) NOT NULL AUTO_INCREMENT,
     3   `name` varchar(45) NOT NULL,
     4   PRIMARY KEY (`id`)
     5 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
     6 
     7 CREATE TABLE `user_account` (
     8   `userid` int(11) NOT NULL AUTO_INCREMENT,
     9   `username` varchar(30) NOT NULL,
    10   `password` varchar(30) NOT NULL,
    11   `groupname` varchar(10) NOT NULL,
    12   PRIMARY KEY (`userid`)
    13 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    1 INSERT INTO ssi.user_account (userid, username, password, groupname) VALUES (1, 'LMEADORS', 'PICKLE', 'EMPLOYEE');
    2 INSERT INTO ssi.user_account (userid, username, password, groupname) VALUES (2, 'JDOE', 'TEST', 'EMPLOYEE');

    数据库连接信息:db.properties

    driverClass=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3306/ssi
    username=root
    password=123456

    主配置文件:sqlMapConfig.xml

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <!DOCTYPE sqlMapConfig
     3     PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
     4     "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
     5 <sqlMapConfig>
     6     <properties resource="db.properties"/>
     7     <!--iBatis配置信息-->
     8     <settings enhancementEnabled="true"
     9             useStatementNamespaces="true"
    10             cacheModelsEnabled="true"
    11             lazyLoadingEnabled="true"/>
    12 
    13     <!--事务管理器-->
    14     <transactionManager type="JDBC">
    15     <!--数据库连接信息-->
    16     <dataSource type="SIMPLE">
    17       <property name="JDBC.Driver" value="${driverClass}"/>
    18       <property name="JDBC.ConnectionURL" value="${url}"/>
    19       <property name="JDBC.Username" value="${username}"/>
    20       <property name="JDBC.Password" value="${password}"/>
    21     </dataSource>
    22     </transactionManager>
    23     <!-- 映射文件位置 -->
    24     <sqlMap resource="org/zln/ibatis/sqlmaps/Person.xml" />
    25     <sqlMap resource="org/zln/ibatis/sqlmaps/UserAccount.xml" />
    26 </sqlMapConfig>

    初始化配置文件

     1 package org.zln.ibatis.utils;
     2 
     3 import com.ibatis.common.resources.Resources;
     4 import com.ibatis.sqlmap.client.SqlMapClient;
     5 import com.ibatis.sqlmap.client.SqlMapClientBuilder;
     6 
     7 import java.io.IOException;
     8 import java.io.Reader;
     9 
    10 /**
    11  * Created by sherry on 000008/6/8 14:36.
    12  */
    13 public class SqlMapUtils {
    14     private static final String resource = "sqlMapConfig.xml";
    15     public static SqlMapClient sqlMapClient = null;
    16 
    17     public static SqlMapClient getSqlMapClient() throws IOException {
    18         Reader reader = Resources.getResourceAsReader(resource);
    19         sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
    20         return sqlMapClient;
    21     }
    22 }

    映射文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE sqlMap
            PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
            "http://www.ibatis.com/dtd/sql-map-2.dtd">
    
    <!-- 设置命名空间 -->
    <sqlMap namespace="org.zln.ibatis.domain.UserAccount">
    
        <typeAlias alias="UserAccount" type="org.zln.ibatis.domain.UserAccount"/>
    
        /*外部参数映射*/
        <parameterMap id="fullUserAccountMapExport" class="UserAccount">
            <parameter property="userid" jdbcType="INTEGER"/>
            <parameter property="username" jdbcType="VARCHAR"/>
            <parameter property="password" jdbcType="VARCHAR"/>
            <parameter property="groupname" jdbcType="VARCHAR"/>
        </parameterMap>
        /*结果集映射*/
        <resultMap id="UserAccountMap" class="UserAccount">
            <result property="userid" column="userid"/>
            <result property="username" column="username"/>
            <result property="password" column="password"/>
            <result property="groupname" column="groupname"/>
            <!--当查询tt的时候,会查询select-id对应的SQL,然后映射到JavaBean中的listColl,-->
            <!--<result column="tt" property="listColl" select="select-id"/>-->
        </resultMap>
    
        <select id="getUserAccountList" parameterClass="UserAccount" resultClass="UserAccount">
            SELECT userid,username,password,groupname FROM user_account
            <dynamic prepend="WHERE">
                <isNotEmpty property="username" prepend="AND">
                    username LIKE '%'||#username#||'%'
                </isNotEmpty>
                <isNotEmpty property="password" prepend="AND">
                    password = #password#
                </isNotEmpty>
                <isNotEmpty property="groupname" prepend="AND">
                    groupname LIKE '%'||#groupname#||'%'
                </isNotEmpty>
                <!--循环标签-->
                <iterate property="ids" open="(" close=")" conjunction=",">
                    userid = #userid#
                </iterate>
            </dynamic>
        </select>
    
        <insert id="insertUserAccount" parameterClass="UserAccount">
            INSERT INTO user_account (username,password,groupname) VALUES (#username#,#password#,#groupname#)
        </insert>
        /*使用外部映射*/
        <insert id="insertUserAccount_1" parameterMap="fullUserAccountMapExport">
            INSERT INTO user_account (username,password,groupname) VALUES (?,?,?)
        </insert>
        /*Oracle的序列使用演示*/
        <!--<insert id="insertUserAccount_2" parameterMap="fullUserAccountMapExport">
            <selectKey keyProperty="userid" resultClass="int">
                SELECT nextVal(#序列#) FROM dual
            </selectKey>
            INSERT INTO user_account (userid,username,password,groupname) VALUES (?,?,?,?)
        </insert>-->
    
        <update id="updateUserAccount" parameterClass="UserAccount">
            UPDATE user_account set userid = #userid#
            <dynamic>
                <isNotEmpty prepend="," property="username">
                    username = #username#
                </isNotEmpty>
                <isNotEmpty prepend="," property="password">
                    password = #password#
                </isNotEmpty>
                <isNotEmpty prepend="," property="groupname">
                    groupname = #groupname#
                </isNotEmpty>
            </dynamic>
            WHERE userid = #userid#
        </update>
    
    
        <sql id="select-user_account-list">
            SELECT userid,username,password,groupname FROM user_account
        </sql>
        <sql id="select-user_account-count">
            SELECT COUNT(1) FROM user_account
        </sql>
        <sql id="where-user_account">
            <![CDATA[
              WHERE userid > #userid:INTEGER#
            ]]>
        </sql>
        <select id="selectUserAccountsAfterId" parameterClass="UserAccount" resultClass="UserAccount">
            <include refid="select-user_account-list"/>
            <include refid="where-user_account"/>
        </select>
    
        /*调用存储过程演示*/
        <!--<procedure id="callProDemo" parameterClass="string" resultClass="int">
            {call product(?)}
        </procedure>-->
    
    </sqlMap>

    BaseDao.java

     1 package org.zln.ibatis.dao.base;
     2 
     3 import com.ibatis.sqlmap.client.SqlMapClient;
     4 import org.zln.ibatis.utils.SqlMapUtils;
     5 
     6 import java.io.IOException;
     7 
     8 /**
     9  * Created by sherry on 000008/6/8 15:16.
    10  */
    11 public class BaseDao {
    12     public SqlMapClient sqlMapClient;
    13 
    14     {
    15         try {
    16             sqlMapClient = SqlMapUtils.getSqlMapClient();
    17         } catch (IOException e) {
    18             e.printStackTrace();
    19         }
    20     }
    21 }

    UserAccountDaoImpl.java

     1 package org.zln.ibatis.dao.impl;
     2 
     3 import org.zln.ibatis.dao.UserAccountDao;
     4 import org.zln.ibatis.dao.base.BaseDao;
     5 import org.zln.ibatis.domain.UserAccount;
     6 
     7 import java.sql.SQLException;
     8 import java.util.List;
     9 import java.util.Map;
    10 
    11 /**
    12  * Created by sherry on 000008/6/8 15:15.
    13  */
    14 public class UserAccountDaoImpl extends BaseDao implements UserAccountDao {
    15 
    16     @Override
    17     public List<UserAccount> getUserAccountList(UserAccount userAccount){
    18         List<UserAccount> userAccounts = null;
    19         try {
    20             userAccounts = sqlMapClient.queryForList("org.zln.ibatis.domain.UserAccount.getUserAccountList",userAccount);
    21 
    22             //start test queryForMap
    23             Map<String,UserAccount> map = sqlMapClient.queryForMap("org.zln.ibatis.domain.UserAccount.getUserAccountList",userAccount,"username");
    24             System.out.println(map);
    25             //end
    26         } catch (SQLException e) {
    27             e.printStackTrace();
    28         }
    29         return userAccounts;
    30     }
    31 
    32     @Override
    33     public List<UserAccount> getUserAccountListAfterId(UserAccount userAccount) {
    34         List<UserAccount> userAccounts = null;
    35         try {
    36             userAccounts = sqlMapClient.queryForList("org.zln.ibatis.domain.UserAccount.selectUserAccountsAfterId",userAccount);
    37 
    38         } catch (SQLException e) {
    39             e.printStackTrace();
    40         }
    41         return userAccounts;
    42     }
    43 
    44     @Override
    45     public void insertUserAccount(List<UserAccount> userAccounts) {
    46         try {
    47             /*批处理*/
    48             sqlMapClient.startTransaction();
    49             sqlMapClient.startBatch();
    50             for (UserAccount userAccount:userAccounts){
    51                 sqlMapClient.insert("org.zln.ibatis.domain.UserAccount.insertUserAccount",userAccount);
    52             }
    53             sqlMapClient.executeBatch();
    54             sqlMapClient.commitTransaction();
    55         } catch (SQLException e) {
    56             e.printStackTrace();
    57         }finally {
    58             try {
    59                 sqlMapClient.endTransaction();
    60             } catch (SQLException e) {
    61                 e.printStackTrace();
    62             }
    63         }
    64     }
    65 
    66     @Override
    67     public void updateUserAccount(UserAccount userAccount) {
    68         try {
    69             sqlMapClient.update("org.zln.ibatis.domain.UserAccount.updateUserAccount",userAccount);
    70         } catch (SQLException e) {
    71             e.printStackTrace();
    72         }
    73     }
    74 
    75 
    76 }

    日志配置文件:log4j.properties

    ## LOGGERS ##
    #define a logger 
    #log4j.rootLogger=DEBUG,console,file
    log4j.rootLogger=INFO,console
    ## APPENDERS ##
    
    log4j.appender.console=org.apache.log4j.ConsoleAppender
    # define an appender named file, which is set to be a RollingFileAppender
    log4j.appender.file=org.apache.log4j.RollingFileAppender
    #set the log's size
    log4j.appender.file.MaxFileSize=1000KB
    log4j.appender.file.MaxBackupIndex=20
    ## LAYOUTS ##
    # assign a SimpleLayout to console appender
    log4j.appender.console.layout=org.apache.log4j.SimpleLayout
    # assign a PatternLayout to file appender
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    # For debug
    # log4j.appender.file.layout.ConversionPattern=[%-5p][%t][%C][%d{yyyy-MM-dd HH:mm:ss}] %m%n
    # For deployment
    log4j.appender.file.layout.ConversionPattern=[%-5p][%d{yyyy-MM-dd HH:mm:ss}] %m%n
    # show SQL Where ibatis run
    log4j.logger.com.ibatis=DEBUG
    log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
    log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
    log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
    log4j.logger.java.sql.Connection=DEBUG
    log4j.logger.java.sql.Statement=DEBUG
    log4j.logger.java.sql.PreparedStatement=DEBUG
  • 相关阅读:
    Objective--C三大特性:封装,继承,多态(零碎笔记)
    零碎的知识点
    Objective--C之《文件操作》练习代码
    Objective--C的Foundation frame之NSMutableDictionary代码
    Objective--C的Foundation frame之NSMutableArray代码
    Objective--C随笔2016年8月7日
    关于OC中的委托delegate
    javascript 绝对路径工具类
    IE 弹出框处理经验
    InputStream和OutputStream 何时使用
  • 原文地址:https://www.cnblogs.com/sherrykid/p/4570535.html
Copyright © 2020-2023  润新知