ibatsi学习总结

学习来源:黑马程序员

先总结一下遇到的问题

问题1:
1,resultMap 可以不写,比如配置1 配置1: <typeAlias alias="puser" type="com.loong.config.PUser"/> <select id="selectAllPUser" resultClass="puser"></select> select * from p_user </select> 2resultMap 写的情况下,select语句可以有两种 比如--1,--2,检索时,结果一样 <typeAlias alias="puser" type="com.loong.config.PUser"/> <resultMap class="puser" id="puserResult"> <result property="id" column="ID"/> <result property="name" column="NAME"/> <result property="password" column="PASSWORD"/> <result property="age" column="AGE"/> </resultMap> <!-- 1. 也可以实现--> <!-- <select id="selectAllPUser" resultClass="puser"></select> --> <!-- 2. --> <select id="selectAllPUser" resultMap="puserResult" > select * from p_user </select>
问题2:
模糊查询有两种方法
方法1:
java:dao.selectPUserByName("test")
<select id="selectPUserByName" resultClass="puser" parameterClass="String">
        select id,name,password,age 
        from p_user
        where name like '%$name$%'
    </select>

方式2
java:dao.selectPUserByName("%test%")
<select id="selectPUserByName" resultClass="puser" parameterClass="String">
        select id,name,password,age 
        from p_user
        where name like '$name$' 
    </select>
问题3:
如果是普通方式创建自动ID的话,通过selectKey的方式,添加ID
比如:
创建自增长语句:create sequence p_user_Sequence start with 1 increment by 1;
<insert id="insertPUserBySequence" parameterClass="PUser">
    <selectKey resultClass="java.lang.String" keyProperty="id">
        select p_user_Sequence.nextVal as id
        from dual
    </selectKey> -->            
    insert into p_user(id, name,  password,  age)
            values(#id#,#name#,#password#,#age#)        
</insert>

如果是特殊自增ID的话,比如
create sequence p_user_Sequence
increment by 1
    start with 1
    nomaxvalue
    nocycle
    cache 10;
create or replace trigger p_user before
insert on p_user for each row
begin 
  select p_user_Sequence.nextval into:New.id from dual;
end;
就不必在添加selectKey,会自动实现。
<insert id="insertPUserBySequence" parameterClass="PUser">    
    insert into p_user(id, name,  password,  age)
            values(#id#,#name#,#password#,#age#)        
</insert>
需要三个配置文件:
1.SqlMapConfig.xml 总配置文件
2.PUser.xml 表映射文件
3.jdbc.properties 数据库配置文件
1. SqlMapConfig.xml 
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE sqlMapConfig 
    PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
    "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">

<sqlMapConfig>

    <properties resource="com/loong/config/jdbc.properties"/>
    
    <transactionManager type="JDBC">
        <dataSource type="SIMPLE">
            <property value="${driver}" name="JDBC.Driver"/>
            <property value="${url}" name="JDBC.ConnectionURL"/>
            <property value="${username}" name="JDBC.Username"/>
            <property value="${password}" name="JDBC.Password"/>
        </dataSource>
    </transactionManager>
    
    <sqlMap resource="com/loong/config/PUser.xml"/>

</sqlMapConfig>
2. PUser.xml 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap
    PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
    "http://ibatis.apache.org/dtd/sql-map-2.dtd">
    
<sqlMap>
    <typeAlias alias="puser" type="com.loong.config.PUser"/>
    
    <resultMap class="puser" id="puserResult">
        <result property="id" column="ID"/>
        <result property="name" column="NAME"/>
        <result property="password" column="PASSWORD"/>
        <result property="age" column="AGE"/>
    </resultMap>
    
    <!-- 1. 也可以实现-->
    <!-- <select id="selectAllPUser" resultClass="puser"></select> -->
    <!-- 2. -->
    <select id="selectAllPUser" resultMap="puserResult"  >
        select * 
        from p_user
    </select>
    
    <select id="selectPUserByName" resultClass="puser" parameterClass="String">
        select id,name,password,age 
        from p_user
        <!--方式1 where name like '$name$'  java dao.selectPUserByName("%test%") -->
        where name like '%$name$%'
    </select>

    <insert id="insertPUserBySequence" parameterClass="PUser">
    
<!--         3.如果是下面的创建sql语句,不用加selectKey,会自动创建ID
create sequence p_user_Sequence
increment by 1
    start with 1
    nomaxvalue
    nocycle
    cache 10;
create or replace trigger p_user before
insert on p_user for each row
begin 
  select p_user_Sequence.nextval into:New.id from dual;
end; -->
        <!-- <selectKey resultClass="java.lang.String" keyProperty="id">
            select p_user_Sequence.nextVal as id
            from dual
            还有一种简单创建自增长语句:create sequence p_user_Sequence start with 1 increment by 1;
        </selectKey> -->            
        insert into p_user(id, name,  password,  age)
                    values(#id#,#name#,#password#,#age#)        
    </insert>
    
    <update id="updatePUserById" parameterClass="puser">
        update p_user
        set        
                name=#name#,
                password=#password#,
                age=#age#
        where   id=#id#
    </update>
    
    <delete id="deletePUserById" parameterClass="int">
        delete from p_user
        where id=#id#
    </delete>
</sqlMap>
3. jdbc.properties 
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
username=scott
password=tiger
1.对象文件PUser.java
package com.loong.config;

public class PUser {
    
    public int id;
    public String name;
    public String password;
    public int age;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        String content = "ID = " + id + " name= " + name + " password= " + password + " age= "+ age;
        return content;
    }
    
    

}

2.接口文件IPUserDao.java
package com.loong.config;

import java.util.List;

public interface IPUserDao {
    
    public List<PUser> selectAllPUser();
    
    public List<PUser> selectPUserByName(String name);
    
    public void InsertPUserbySequence(PUser puser);
    
    public void deletePUserById( int id);
    
    public void updatePUserById(PUser puser);

}
3. 实现类文件IPuserDaoImpl.java
package com.loong.config;

import java.io.IOException;
import java.io.Reader;
import java.sql.SQLException;
import java.util.List;

import com.ibatis.sqlmap.client.SqlMapClient;

public class IPuserDaoImpl implements IPUserDao {
    
    private static SqlMapClient sqlMapClient= null;
    
    static {
        try {
            Reader reader = com.ibatis.common.resources.Resources.
                    getResourceAsReader("com/loong/config/SqlMapConfig.xml");
            
            sqlMapClient = com.ibatis.sqlmap.client.SqlMapClientBuilder.buildSqlMapClient(reader);
            
            reader.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }
    
    

    //1.
    @Override
    public List<PUser> selectAllPUser() {
        
        List<PUser> puserList = null;
        try {
            puserList = sqlMapClient.queryForList("selectAllPUser");
            System.out.println("ddd");
        } catch (SQLException e) {
            e.printStackTrace();
        }
        
        return puserList;
    }

    @Override
    public List<PUser> selectPUserByName(String name) {
        List<PUser> puserList = null;
        
        try {
            puserList = sqlMapClient.queryForList("selectPUserByName", name);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return puserList;
    }

    @Override
    public void InsertPUserbySequence(PUser puser) {
        try {
            sqlMapClient.insert("insertPUserBySequence", puser);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    @Override
    public void deletePUserById(int id) {
        try {
            sqlMapClient.delete("deletePUserById",id);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    @Override
    public void updatePUserById(PUser puser) {

        try {
            sqlMapClient.update("updatePUserById",puser);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    public static void main(String[] args) {
        IPUserDao dao = new IPuserDaoImpl();
        //1.
        /*for(PUser puser : dao.selectAllPUser()){
            System.out.println(puser.toString());
        }*/
        
        
        //2.
        
/*        for(PUser puser : dao.selectPUserByName("%test%")){ // 对应xml-->where name like '$name$'
*/        /*for(PUser puser : dao.selectPUserByName("test")){   // 对应xml-->where name like '%$name$%'
            System.out.println(puser.toString());
        }*/
        
        //2.
        PUser puser = new PUser();
        puser.setName("intage");
        puser.setPassword("123");
        puser.setAge(1);
        
        dao.InsertPUserbySequence(puser);

        
        // 3.
        /*PUser puser = new PUser();
        puser.setId("16");
        puser.setName("ageibatis");
        puser.setPassword("123");
        puser.setAge("1");
        
        dao.updatePUserById(puser);*/
        
        //4.
        /*dao.deletePUserById(12);*/
        
    
    }

}
原文地址:https://www.cnblogs.com/ysloong/p/6394114.html