Oracle:映射文件,jdbc,序列實現(xiàn)自動增長列,Log4j,SqlMap.xml,db.properties
內(nèi)容概覽:
映射文件
<sql></sql>的標(biāo)簽的作用的話我理解為"內(nèi)嵌"內(nèi)容的作用,或者是封裝函數(shù)后調(diào)用,進而減少使用的代碼
要注意的文件有UserinfoSqlMap.xml,db.properties,mybatis.xml
mybatis.xml中使用environment標(biāo)簽來設(shè)置MySQL和Oracle的配置,這樣的話就是
可以要連哪個數(shù)據(jù)庫就在調(diào)用時換相應(yīng)的id的值就可以了(下面是只切換成一個數(shù)據(jù)庫,其實也可以同時連接不同的幾個數(shù)據(jù)庫)。
作業(yè)
關(guān)于#{}和${}都可以代表?占位符這件事
關(guān)于session的調(diào)用方法
使用序列來實現(xiàn)自動增長列的效果
1、在mybatis項目中引入Log4j
2、在項目中同時引入oracle和mysql數(shù)據(jù)庫,實現(xiàn)查詢語句的切換
3、改進昨天作業(yè)中的新增方法,在oracle數(shù)據(jù)庫和mysql數(shù)據(jù)庫中處理自動增長的列
個人積累的注意事項:

<?xml version="1.0" encoding="UTF-8" ?>
的部分必須要寫在第一行,不然會報錯




要注意的文件有UserinfoSqlMap.xml,db.properties,mybatis.xml
mybatis.xml中使用environment標(biāo)簽來設(shè)置MySQL和Oracle的配置,這樣的話就是
可以要連哪個數(shù)據(jù)庫就在調(diào)用時換相應(yīng)的id的值就可以了(下面是只切換成一個數(shù)據(jù)庫,其實也可以同時連接不同的幾個數(shù)據(jù)庫)。





<sql></sql>的標(biāo)簽的作用的話我理解為"內(nèi)嵌"內(nèi)容的作用,或者是封裝函數(shù)后調(diào)用,進而減少使用的代碼



作業(yè) START

package com.SSHC.bean;
public class Userinfo {
? ? private Integer id;
? ? private String act;
? ? private String pwd;
? ? private String birth;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getAct() {
return act;
}
public void setAct(String act) {
this.act = act;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getBirth() {
return birth;
}
public void setBirth(String birth) {
this.birth = birth;
}
}

<?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">
? ??
<!-- -CTRL+F:sql標(biāo)簽的部分可以重復(fù)的使用
sql標(biāo)簽的部分可以重復(fù)的使用,
<?xml version="1.0" encoding="UTF-8" ?>
的部分必須要寫在第一行,不然會報錯 -->
? ??
<!-- namespace就是空間名,它必須在整個項目中都是唯一的 -->
<mapper namespace="com.SSHC.dao.UserinfoDao">
? ? <!-- id必須是唯一的 -->
? ? <!-- 創(chuàng)建一個List<Userinfo>集合,變量名叫rmUserinfo -->
? ? <resultMap type="Userinfo" id="rmUserinfo">
? ? ? ? <!-- userinfo表的主鍵是id -->
? ? ? ? <!-- property指的是Userinfo類的屬性名,
? ? ? ? ? ? ?column指的是userinfo表的列名 -->
? ? ? ? <!-- u.setId(rs.getInt("ID")) -->
? ? ? ? <id property="id" column="ID" />
? ? ? ? <!-- u.setAct(rs.getInt("ACT")) -->
? ? <result property="act" column="ACT"/>
? ? <result property="pwd" column="PWD"/>
? ? <result property="birth" column="BIRTH"/>
? ? </resultMap>
? ? <!-- sql標(biāo)簽的部分可以重復(fù)的使用: -->
? ? <sql id="whereCls">
? ? ? ? where id = #{id}
? ? </sql>
? ? <!-- public List<Userinfo>selectAll() -->
? ? <select id="selectAll" resultMap="rmUserinfo">
? ? ? ? select * from userinfo
? ? </select>
? ??
? ? <!-- public Userinfo selectById(Integer id) -->
? ? <!-- mybatis框架中,占位符?使用#{}來代替 -->
? ? <select id="selectById" resultMap="rmUserinfo">
? ? ? ? select * from userinfo <include refid="whereCls"></include>
? ? </select>
? ??
? ? <!-- public Integer add(Userinfo u) -->
? ? <!-- 因為參數(shù)的類型是Userinfo,所以占位符中的字符串就必須是對應(yīng)的屬性名
? ? ? ? ?(屬性名區(qū)分大小寫) -->
? ? <insert id="add" parameterType="Userinfo">
? ? ? ? insert into userinfo?
values(seq_userinfo.nextval,
#{act},#{pwd},to_date(#{birth},'yyyy-mm-dd'))
? ? </insert>
? ? <!-- mysql的新增:keyProperty表示自動增長的列的列名叫什么: -->??
? ? <insert id="addMySQL" parameterType="Userinfo"
? ? ? ? useGeneratedKeys="true" keyProperty="id">
? ? ? ? insert into userinfo (act,pwd,birth)?
? ? ? ? values(#{act},#{pwd},#{birth})
? ? </insert>
? ??
? ? <!-- public Integer update(Userinfo u) -->
? ? <update id="update" parameterType="Userinfo">
? ? ? ? update userinfo set act = #{act},pwd = #{pwd},birth = to_date(#{birth},'yyyy-mm-dd')
? ? ? ? <include refid="whereCls"></include>
? ? </update>
? ? <!-- public Integer deleteById(Integer id) -->
? ? <delete id="deleteById">
? ? ? ? delete from userinfo <include refid="whereCls"></include>
? ? </delete>
</mapper>


/**
?* CTRL+F:
?*?
?* 因為使用了mybatis框架而不用寫的JDBC的部分
?*?
?* 個人對factory.openSession();,調(diào)用UserinfoSqlMap.xml中的方法
?* */
package ZSGCtest;
import java.io.IOException;
import java.io.Reader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.SSHC.bean.Userinfo;
public class Test {
public static void main(String[] args) {
/** 因為使用了mybatis框架而不用寫的JDBC的部分 START*/
// TODO Auto-generated method stub
//? ? ? ? String drivername = "oracle.jdbc.driver.OracleDriver";
//? ? ? ? //oracle數(shù)據(jù)庫的默認(rèn)端口號1521
//? ? ? ? //連接的數(shù)據(jù)庫名字是orcl數(shù)據(jù)庫
//? ? ? ? String url = "jdbc:oracle:thin:@localhost:1521:orcl";
//? ? ? ? String username = "j190802";
//? ? ? ? String pwd = "orcl";
//? ? ? ??
//? ? ? ? Connection conn = null;
//? ? ? ? PreparedStatement pstm = null;
//? ? ? ? ResultSet rs = null;
//? ? ? ??
//? ? ? ? try {
//? ? ? ? Class.forName(drivername);
// conn = DriverManager.getConnection(url,username,pwd);
// pstm = conn.prepareStatement("select * from userinfo where id = ?");
// pstm.setInt(1, 8);
// rs = pstm.executeQuery();
// List<Userinfo>rmUserinfo = new ArrayList<Userinfo>();
// while(rs.next()) {
// Userinfo u = new Userinfo();
// //ID是userinfo表的主鍵
// u.setId(rs.getInt("ID"));
// u.setAct(rs.getString("ACT"));
// System.out.println(rs.getString("ACT"));
// u.setPwd(rs.getString("PWD"));
// u.setBirth(rs.getString("BIRTH"));
// rmUserinfo.add(u);
// }
//
/*String sql = "insert into userinfo
?*? values(?,?,?,to_date(?,'yyyy-mm-dd'))";
?*/
// pstm = conn.prepareStatement(sql);
// Userinfo u = new Userinfo();
// u.setId(11);
// u.setAct("haha");
// u.setPwd("09876");
// u.setBirth("2000-7-3");
// pstm.setInt(1, u.getId());
// pstm.setString(2, u.getAct());
// pstm.setString(3, u.getPwd());
// pstm.setString(4, u.getBirth());
// int count = pstm.executeUpdate();
// System.out.println(count);
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// } finally {
// try {
// if(rs != null) {
// rs.close();
// }
// if(pstm != null) {
// pstm.close();
// }
// if(conn != null) {
// conn.close();
// }
// } catch(Exception e) {
// e.printStackTrace();
// }
// }
/** 因為使用了mybatis框架而不用寫的JDBC的部分 END*/
//獲取主配置文件的路徑為mybatis.xml,所以設(shè)置path為這個值:
String path = "mybatis.xml";
//使用Reader來讀取mybatis.xml中的配置信息,
// 就是讀取四大連接字符串的內(nèi)容:
Reader config;
try {
//用SqlSessionFactory選擇mysqlConf或oracleConf:
config = Resources.getResourceAsReader(path);
SqlSessionFactory factory =?
new SqlSessionFactoryBuilder().build(config,"oracleConf");
/*
?* 個人對factory.openSession();,
?* 調(diào)用UserinfoSqlMap.xml中的方法 START
?*?
?* 聲明一個SqlSession類型的數(shù)據(jù)庫的操作對象session
個人理解為factory.openSession();“打開”session,
類似于打開了一個大門,像下面的提交事務(wù)(session.commit();)
,調(diào)用UserinfoSqlMap.xml中的方法(比如session.selectList(exePath);)
等等就是類似于提交這件事
走進了這個大門。
個人對factory.openSession();,調(diào)用UserinfoSqlMap.xml中的方法 END*/
SqlSession session = factory.openSession();
/*使用session.selectList(exePath)
,也就是factory.openSession().selectList(exePath)
來調(diào)用UserinfoSqlMap.xml中聲明的selectAll方法*/
/*執(zhí)行路徑就是映射文件的
?* 【namespace屬性的自己命名的值+'.'+id的自己命名的值】
* 比如com.SSHC.dao.UserinfoDao.selectAll
?* 中:namespace屬性的自己命名的值=com.SSHC.dao.UserinfoDao
* id的自己命名的值=selectAll
* */
while(true){
System.out.print("請選擇操作:1.selectAll "
+ ",2.selectById,"
+ "3.add,\n"
+ "4.update,"
+ "5.deleteById 6.addMySQL(這里的addMySQL"
+ "是對應(yīng)MySQL時的方法)"
+ "");
/**
* \n就是換行的符號*/
? ?Scanner input = new Scanner(System.in);
? ?int num = input.nextInt();
? ?System.out.println(num);
? ?
if(num==1){
String exePath = null;
exePath = "com.SSHC.dao.UserinfoDao.selectAll";
List<Userinfo>list = session.selectList(exePath);
for(Userinfo u : list) {
System.out.println(u.getAct());
}}
if(num==2){
String exePath = null;
exePath = "com.SSHC.dao.UserinfoDao.selectById";
Userinfo u = session.selectOne(exePath,1);
System.out.println(u.getAct());
}
if(num==3){
String exePath = null;
exePath = "com.SSHC.dao.UserinfoDao.add";
Userinfo u = new Userinfo();
u.setAct("詩書畫唱");
u.setPwd("666");
u.setBirth("2006-6-26");
Integer count = session.update(exePath,u);
session.commit();
System.out.println(count);
}
if(num==6){
String exePath = null;
exePath = "com.SSHC.dao.UserinfoDao.addMySQL";
Userinfo u = new Userinfo();
u.setAct("三連關(guān)注");
u.setPwd("111");
u.setBirth("2002-02-22");
Integer count = session.update(exePath,u);
session.commit();
System.out.println(count);
}
if(num==4){
String exePath = null;
Userinfo u = new Userinfo();
u.setId(1);
u.setAct("測試賬號");
u.setPwd("66666");
u.setBirth("1999-12-29");
exePath = "com.SSHC.dao.UserinfoDao.update";
Integer count = session.update(exePath,u);
session.commit();
System.out.println(count);
}
if(num==5){
String exePath = null;
exePath = "com.SSHC.dao.UserinfoDao.deleteById";
Integer count = session.delete(exePath,5);
//新增修改和刪除一定記得提交事務(wù)
session.commit();
System.out.println(count);
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}


oracle_drivername=oracle.jdbc.driver.OracleDriver
oracle_url=jdbc:oracle:thin:@localhost:1521:orcl
oracle_username=X
oracle_password=sshcPwd
mysql_drivername=com.mysql.jdbc.Driver
mysql_url=jdbc:mysql://localhost:3306/mybatisJava3?useUnicode=true&characterEncoding=GBK2312
mysql_username=firstjsp
mysql_password=1
sqlserver_drivername=com.microsoft.sqlserver.jdbc.SQLServerDriver
sqlserver_url=jdbc:sqlserver://localhost:1433;databaseName=cervs
sqlserver_username=sa
sqlserver_password=1

log4j.rootLogger=DEBUG,Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d[%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG


<?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>??
? ? <!-- 讀取指定的properties文件中的內(nèi)容 -->
? ? <properties resource="db.properties"></properties>?
? ? <!-- 給類取一個簡短的別名 -->
? ? <typeAliases>
? ? ? ? <typeAlias type="com.SSHC.bean.Userinfo" alias="Userinfo"/>
? ? </typeAliases>
? ? <environments default="oracleConf">? ? ? ? ? ? ? ? ?
? ? ? ? <!-- oracle配置 -->?
? ? ? ? <environment id="oracleConf">??
? ? ? ? ? ? <transactionManager type="JDBC">?
? ? ? ? ? ? ? ? <property name="closeConnection" value="false"/>
? ? ? ? ? ? </transactionManager>?
? ? ? ? ? ? <!-- 配置數(shù)據(jù)源 -->? ? ? ?
? ? ? ? ? ? <dataSource type="POOLED">
? ? ? ? ? ? ? ? <property name="driver" value="${oracle_drivername}"/>? ?
? ? ? ? ? ? ? ? <property name="url" value="${oracle_url}"/>?
? ? ? ? ? ? ? ? <property name="username" value="${oracle_username}"/>?
? ? ? ? ? ? ? ? <property name="password" value="${oracle_password}"/>??
? ? ? ? ? ? </dataSource>? ??
? ? ? ? </environment>
? ? ? ? <!-- mysql配置 -->
? ? ? ? <environment id="mysqlConf">
? ? ? ? ? ? <!-- 事務(wù)配置 -->
? ? ? ? ? ? <transactionManager type="JDBC">?
? ? ? ? ? ? ? ? <property name="closeConnection" value="false"/>
? ? ? ? ? ? </transactionManager>?
? ? ? ? ? ? <!-- 配置數(shù)據(jù)源 -->? ? ? ?
? ? ? ? ? ? <dataSource type="POOLED">
? ? ? ? ? ? ? ? <property name="driver" value="${mysql_drivername}"/>? ?
? ? ? ? ? ? ? ? <property name="url" value="${mysql_url}"/>?
? ? ? ? ? ? ? ? <property name="username" value="${mysql_username}"/>?
? ? ? ? ? ? ? ? <property name="password" value="${mysql_password}"/>??
? ? ? ? ? ? </dataSource>
? ? ? ? </environment>
? ? </environments>?
? ? <!-- 實體映射文件集合 -->?
? ? <mappers>
? ? ? ? <!-- 告訴mybatis框架,映射文件放在什么地方 -->
? ? ? ? <mapper resource="com/SSHC/bean/UserinfoSqlMap.xml"/>
? ? </mappers>
</configuration>


作業(yè) END
個人的理解記錄 START
關(guān)于#{}和${}都可以代表?占位符這件事。

關(guān)于session的調(diào)用方法。


使用序列來實現(xiàn)自動增長列的效果。

個人的理解記錄?END
映射文件 START














映射文件 END
講義 START
在mybatis框架中,分為三種配置文件:
主配置文件:mybatis.xml,每個項目中只有一個
映射文件:XXXXSqlmap.xml,每個項目中可以有無數(shù)個,你的項目中有幾個表,映射文件就有幾個
可以看成使用xml文件寫的dao類
properties文件:在項目中一般用來存放數(shù)據(jù)庫連接字符串
"在映射文件中,到處都有com.jy.bean.Userinfo,這個字符串太長了,我可以通過typeAliases給
這個字符串取一個別名來縮短它"
Mybatis框架可以切換數(shù)據(jù)庫:
實現(xiàn)在oracle數(shù)據(jù)庫和mysql數(shù)據(jù)庫之間的切換
1、通過environments標(biāo)簽的default屬性切換
2、java代碼
數(shù)據(jù)庫連接池:Connection對象
主鍵處理:
1、oracle的主鍵處理
