Oracle:Mybatis,JDBC数据库连接,增删改查,提交事务,解决端口号报错【诗书画唱】

概括:
持久层框架的特点和创建Mybatis工程
PPT文本
示例(用mybatis框架像数据库中插入一条数据)
解决因为端口号为1522或1521引发的IO错误,查看端口号
sqlserver,mysql ,oracle各自默认的不同的端口号
关于使用修改语句等时未提交事务后JDBC无法再修改这条数据这件事
sqlserver,mysql ,oracle各自默认的不同的端口号
关于mybatis.xml配置文件的注意事项
Mybatis框架建表示例

解决因为端口号为1522或1521引发的IO错误,查看端口号 START
这个是有时eclipse的控制台中会报出的错误:

https://blog.csdn.net/Hellowenpan/article/details/79645173

当然了我就没这篇文章写得那么麻烦了,
D:\oracle\product\10.2.0\db_1\network\ADMIN


解决因为端口号为1522或1521引发的IO错误,查看端口号 END
示例(用mybatis框架像数据库中插入一条数据)START

abatis
n.鹿砦,拒木,障碍物;


Mybatis框架建表示例 START
create table Userinfo(
id number primary key,
act varchar2(30) not null,
pwd varchar2(30) not null,
birth date
);
--drop sequence seq_Userinfo
create sequence seq_Userinfo
start with 1 --起始值是1
increment by 1 --增长的值
maxvalue 999999999 --序列号的最大值
minvalue 1 --序列号的最小值
nocycle --是否循环
cache 10; --预存
insert into Userinfo values(seq_Userinfo.nextval,'黑黑','pwd1',to_date('2020-06-06','yyyy-mm-dd'));
insert into Userinfo values(seq_Userinfo.nextval,'红红','pwd2',to_date('2020-06-07','yyyy-mm-dd'));
insert into Userinfo values(seq_Userinfo.nextval,'蓝蓝','pwd3',to_date('2020-06-08','yyyy-mm-dd'));
--select * from Userinfo
Mybatis框架建表示例 END




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 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.jy.bean.Userinfo;
public class Test {
public static void main(String[] args) {
// 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();
// }
// }
//获取主配置文件的路径
String path = "mybatis.xml";
//读取mybatis.xml中的配置信息,就是读取四大连接字符串的内容
Reader config;
try {
config = Resources.getResourceAsReader(path);
SqlSessionFactory factory =
new SqlSessionFactoryBuilder().build(config);
//数据库的操作对象session
SqlSession session = factory.openSession();
//调用selectAll
//执行路径就是映射文件的namespace属性+'.'+id
String exePath = null;
// exePath = "com.jy.dao.UserinfoDao.selectAll";
// List<Userinfo>list = session.selectList(exePath);
// for(Userinfo u : list) {
// System.out.println(u.getAct());
// }
// exePath = "com.jy.dao.UserinfoDao.selectById";
// Userinfo u = session.selectOne(exePath,8);
// System.out.println(u.getAct());
exePath = "com.jy.dao.UserinfoDao.add";
Userinfo u = new Userinfo();
u.setId(13);
u.setAct("帅哥");
u.setPwd("666666");
u.setBirth("2000-6-06");
Integer count = session.insert(exePath,u);
//新增修改和删除一定记得提交事务
session.commit();
System.out.println(count);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

package com.jy.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">
<!-- namespace就是空间名,它必须在整个项目中都是唯一的 -->
<mapper namespace="com.jy.dao.UserinfoDao">
<!-- id必须是唯一的 -->
<!-- 创建一个List<Userinfo>集合,变量名叫rmUserinfo -->
<resultMap type="com.jy.bean.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>
<!-- 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 where id = #{id}
</select>
<!-- public Integer add(Userinfo u) -->
<!-- 因为参数的类型是Userinfo,所以占位符中的字符串就必须是对应的属性名
(属性名区分大小写) -->
<insert id="add" parameterType="com.jy.bean.Userinfo">
insert into userinfo values(#{id},#{act},#{pwd},to_date(#{birth},'yyyy-mm-dd'))
</insert>
</mapper>

<?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>
<environments default="oracleConf">
<!-- oracle配置 -->
<environment id="oracleConf">
<transactionManager type="JDBC">
<property name="closeConnection" value="false"/>
</transactionManager>
<!-- 配置数据源 -->
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
<property name="username" value="X"/>
<property name="password" value="sshcPwd"/>
</dataSource>
</environment>
</environments>
<!-- 实体映射文件集合 -->
<mappers>
<mapper resource="com/jy/bean/UserinfoSqlMap.xml"/>
</mappers>
</configuration>



示例(用mybatis框架像数据库中插入一条数据)END
关于mybatis.xml配置文件的注意事项 START

关于mybatis.xml配置文件的注意事项 END
教你找下载Oracle后就自带的jdbc包 START
D:\oracle\product\10.2.0\db_1\jdbc\lib



教你找下载Oracle后就自带的jdbc包 END
持久层框架的特点和创建Mybatis工程 START















PPT文本:
什么是MyBatis:
MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录。
像这种支持SQL查询的框架叫持久层框架,与之类似功能的还有Hibernate框架。

持久层框架的特点:
Hibernate和Mybatis等都具备一些共同点:
从配置文件(通常是XML配置文件中)得到 sessionfactory。
由sessionfactory产生 session。
在session中完成对数据的增删改查和事务提交等。
在用完之后关闭session 。
在java对象和数据库表之间有做映射的配置文件,通常是xml 文件。

使用MyBatis:
jar包下载地址为:http://mvnrepository.com/artifact/org.mybatis/mybatis

一个简单的Mybatis示例:
在数据库中创建表stuinfo。
在工程中导入MyBatis框架包和数据库驱动包。
创建MyBatis框架的配置文件mybatis.xml。
创建stuinfo的javabean类和映射文件stuinfoMap.xml。(映射文件也在src目录下,最好和它所映射的javabean类在一起方便管理。)
创建测试类,在main方法中进行测试。

导入MyBatis框架包和数据库驱动包:
Mybatis框架支持一个框架中使用多种不同的数据库,即在框架中同时使用两种以上的数据库,原则是需要用哪个数据库,就导入哪种数据库的jar包。
请在项目中导入Mybatis框架包和数据库驱动包。

创建MyBatis框架的配置文件mybatis.xml:
为了简单起见,我们暂时将Mybatis的配置文件放在src目录下。
注意:当进行框架整合以后,这个文件可能会被删除掉。该文件名没有特殊要求。以下代码片段是框架对数据库连接字符串进行处理。


创建javabean:
根据stuinfo表的字段创建一个javabean,该javabean的类名为Stuinfo,即表名首字母大写,驼峰式命名。


创建javabean的映射文件:
在前面创建的Stuinfo类所在的包中,继续创建映射文件,注意该文件的名字最好遵守项目团队制定的规范,例如规定该文件名是以被映射的java类名拼接上SqlMap.xml而成的。


添加映射文件到mybatis.xml中:
对于映射文件,如果你不通过代码告诉Mybatis框架它在哪里,是没有办法读取到的,所以,我们还需要通过修改mybatis.xml文件告诉框架该如何找到映射文件。
打开mybatis.xml,添加如下的代码:


检查:
工程的文件层次结构如下:


测试:
创建一个带有main方法的测试类,在方法中添加如下的代码:


总结:
比较我们以前写的JDBC代码和使用mybatis框架的代码,说说他们的差别。

作业:
搭建一个Mybatis框架项目,通过Mybatis框架查询出被连接数据库中某个表的所有数据。(使用oracle或者sqlserver试试)
持久层框架的特点和创建Mybatis工程 END
主配置文件和加载properties配置文件 START


Mybatis框架中有三种配置文件:
主配置文件(mybatis.xml)
数据库配置文件(db.properties)
映射文件(SqlMap.xml)
注意:在框架中,除了使用xml文件进行配置以外,还有一种配置文件也使用得很广泛,那就是properties文件。

















在MyBatis中可以通过配置environment元素的子元素transactionManage来指定事务管理器类型:
1、JDBC:直接简单使用了JDBC的提交和回滚设置。它依赖于从数据源得到的连接来管理事务范围。
2、MANAGED:几乎没做什么。它从来不提交或回滚一个连接。而它会让容器来管理事务的整个生命周期(比如Spring或JEE应用服务器的上下文)。默认情况下它会关闭连接。然而一些容器并不希望这样,因此如果你需要从连接中停止它,将closeConnection属性设置为false。

environment元素的子元素dataSource元素使用基本的JDBC数据源接口来配置JDBC连接对象的资源。通过它的type属性来指定内建的数据源类型,type属性包含三种配置:
UNPOOLED:实现每次被请求时简单打开和关闭连接。
POOLED:JDBC连接对象的数据源连接池的实现,用来避免创建新的连接实例时必要的初始连接和认证时间。当前Web应用程序用来快速响应请求很流行的方法。
JNDI:实现为了使用如Spring或应用服务器这类的容器,容器可以集中或在外部配置数据源,然后放置一个JNDI上下文的引用。





主配置文件和加载properties配置文件 END
讲义 START

Struts2:升级servlet为action。
Mybatis:持久层框架,数据库框架。减少jdbc样板代码的编写。
jdbc连接ORACLE数据库:
"1、数据库驱动包(安装oracle数据库时就有了
【安装目录】\product\10.2.0\db_1\jdbc\lib\ojdbc14.jar)"
"2、四大连接字符串
drivername=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:orcl
username=j190802
password=orcl"
3、编写代码
搭建Mybatis框架步骤:
1、导入框架包:mybatis-3.3.0.jar
2、将主配置文件mybatis.xml文件放到src目录下(主配置文件名不要改)
针对于每个表进行操作:
3、创建对应表的bean类
4、创建表的映射文件
5、在主配置文件中注册映射文件
讲义 END
sqlserver,mysql ,oracle各自默认的不同的端口号 START
sqlserver默认端口号为:1433
URL:"jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=dbname"
DRIVERNAME:"com.microsoft.jdbc.sqlserver.SQLServerDriver";
mysql 默认端口号为:3306
URL:jdbc:mysql://localhost:3306/test?user=root&password=&useUnicode=true&characterEncoding=gbk
DRIVERNAME:"com.mysql.jdbc.Driver";
oracle 默认端口号为:1521
URL:"jdbc:oracle:thin:@localhost :1521:orcl";
DRIVERNAME:"oracle.jdbc.driver.OracleDriver";
sqlserver,mysql ,oracle各自默认的不同的端口号 END
关于使用修改语句等时未提交事务后JDBC无法再修改这条数据这件事 START


