欢迎光临散文网 会员登陆 & 注册

Oracle:映射文件,jdbc,序列实现自动增长列,Log4j,SqlMap.xml,db.properties

2021-03-10 19:38 作者:诗书画唱  | 我要投稿

内容概览:

映射文件

<sql></sql>的标签的作用的话我理解为"内嵌"内容的作用,或者是封装函数后调用,进而减少使用的代码

要注意的文件有UserinfoSqlMap.xml,db.properties,mybatis.xml


mybatis.xml中使用environment标签来设置MySQL和Oracle的配置,这样的话就是

可以要连哪个数据库就在调用时换相应的id的值就可以了(下面是只切换成一个数据库,其实也可以同时连接不同的几个数据库)。



作业

关于#{}和${}都可以代表?占位符这件事

关于session的调用方法

使用序列来实现自动增长列的效果

1、在mybatis项目中引入Log4j

2、在项目中同时引入oracle和mysql数据库,实现查询语句的切换

3、改进昨天作业中的新增方法,在oracle数据库和mysql数据库中处理自动增长的列


个人积累的注意事项:




<?xml version="1.0" encoding="UTF-8" ?>

的部分必须要写在第一行,不然会报错


要注意的文件有UserinfoSqlMap.xml,db.properties,mybatis.xml



mybatis.xml中使用environment标签来设置MySQL和Oracle的配置,这样的话就是

可以要连哪个数据库就在调用时换相应的id的值就可以了(下面是只切换成一个数据库,其实也可以同时连接不同的几个数据库)。

mybatis.xml
要连哪个数据库就在调用时换相应的id的值就可以了
UserinfoSqlMap.xml
mybatis.xml

<sql></sql>的标签的作用的话我理解为"内嵌"内容的作用,或者封装函数后调用,进而减少使用的代码





作业 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标签的部分可以重复的使用

sql标签的部分可以重复的使用,

<?xml version="1.0" encoding="UTF-8" ?>

的部分必须要写在第一行,不然会报错 -->

    

<!-- namespace就是空间名,它必须在整个项目中都是唯一的 -->

<mapper namespace="com.SSHC.dao.UserinfoDao">

    <!-- id必须是唯一的 -->

    <!-- 创建一个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标签的部分可以重复的使用: -->

    <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) -->

    <!-- 因为参数的类型是Userinfo,所以占位符中的字符串就必须是对应的属性名

         (属性名区分大小写) -->

    <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();,调用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数据库的默认端口号1521

//        //连接的数据库名字是orcl数据库

//        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,所以设置path为这个值:

String path = "mybatis.xml";

//使用Reader来读取mybatis.xml中的配置信息,

// 就是读取四大连接字符串的内容:

Reader config;

try {

//用SqlSessionFactory选择mysqlConf或oracleConf:

config = Resources.getResourceAsReader(path);

SqlSessionFactory factory = 

new SqlSessionFactoryBuilder().build(config,"oracleConf");




/*

 * 个人对factory.openSession();,

 * 调用UserinfoSqlMap.xml中的方法 START

 * 

 * 声明一个SqlSession类型的数据库的操作对象session

个人理解为factory.openSession();“打开”session,

类似于打开了一个大门,像下面的提交事务(session.commit();)

,调用UserinfoSqlMap.xml中的方法(比如session.selectList(exePath);)

等等就是类似于提交这件事

走进了这个大门。


个人对factory.openSession();,调用UserinfoSqlMap.xml中的方法 END*/

SqlSession session = factory.openSession();

/*使用session.selectList(exePath)

,也就是factory.openSession().selectList(exePath)

来调用UserinfoSqlMap.xml中声明的selectAll方法*/

/*执行路径就是映射文件的

 * 【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"

+ "是对应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("三连关注");

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

//新增修改和删除一定记得提交事务

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&amp;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文件中的内容 -->

    <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> 

            <!-- 配置数据源 -->       

            <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">

            <!-- 事务配置 -->

            <transactionManager type="JDBC"> 

                <property name="closeConnection" value="false"/>

            </transactionManager> 

            <!-- 配置数据源 -->       

            <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>






作业 END

个人的理解记录 START

关于#{}和${}都可以代表?占位符这件事。


关于#{}和${}都可以代表?占位符这件事


关于session的调用方法。

关于session的调用方法


使用序列来实现自动增长列的效果。

使用序列来实现自动增长列的效果




个人的理解记录 END



映射文件 START




映射文件 END



讲义 START

在mybatis框架中,分为三种配置文件:

主配置文件:mybatis.xml,每个项目中只有一个

映射文件:XXXXSqlmap.xml,每个项目中可以有无数个,你的项目中有几个表,映射文件就有几个

可以看成使用xml文件写的dao类

properties文件:在项目中一般用来存放数据库连接字符串


"在映射文件中,到处都有com.jy.bean.Userinfo,这个字符串太长了,我可以通过typeAliases给

这个字符串取一个别名来缩短它"


Mybatis框架可以切换数据库:

实现在oracle数据库和mysql数据库之间的切换

1、通过environments标签的default属性切换

2、java代码


数据库连接池:Connection对象


主键处理:

1、oracle的主键处理




讲义 END








Oracle:映射文件,jdbc,序列实现自动增长列,Log4j,SqlMap.xml,db.properties的评论 (共 条)

分享到微博请遵守国家法律