发表于: 2020-11-02 23:54:07
1 1318
今天完成的事情:
使用debug模式跟踪源码,发现append 最终的结果是将null转化成字符串,递增,输出count=4,length() 方法用于返回字符串的长度,所以第一个结果输出4,用debug跟踪stringBuffer,在第二段源码发现,为空就抛出异常。
spring整合mybatis,和不用实现类的mybatis
需要用到实现类方式:在spring-config中引入db.properties连接数据库,加载SqlSessionFactoryBean配置,之后加入mybatis的配置文件SqlMapConfig.xml,供其加载mybatis的初始化数据,并映射StudentMapper.xml文件,导入sql语句,最后引入实现类StudentDaoImpl。StudentDaoImpl类中有sqlSession对象,sqlSession的作用是操作数据库(实现增删改查),在这里sqlSession对象执行了selectOne方法
通过id获取两个数据。
~ mapper中的namespace是用来绑定dao接口的,即面向接口编程。
~ 当你的namespace绑定接口后,你可以不用写接口实现类,mybatis会通过该绑定自动帮你找到对应要执行的SQL语句
~ 在同一次请求中不允许出现相同名称的方法、类和常量,但是在某些特殊的应用中必须要使用相同名称的方法、类和常量,需要把他们放到不同的空间里,这个空间就是命名空间。
~ 命名空间主要是为了解决命名冲突问题
~ 确保方法名称的唯一性,如果两个xml文件中的方法名一样,那么就用namespace区分
了解了一下在mapper代理中,namespace的作用
最下面是mapper代理的配置,作用:扫描包的路径和sqlSessionFactory对象。
不使用mapper代理:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd">
<!-- 加载配置文件-->
<context:property-placeholder location="classpath:db.properties" />
<!-- 数据源,使用DBCP -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="maxActive" value="10"/>
<property name="maxIdle" value="5"/>
</bean>
<!-- sqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 加载MyBatis的配置文件 -->
<property name="configLocation" value="SqlMapConfig.xml"/>
<!-- 数据源 -->
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 原始DAO接口 -->
<bean id="studentDao" class="com.jnshu.Dao.StudentDaoImpl">
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 指定扫描的包名
如果扫描多个包,每个包中间使用半角逗号分隔 -->
<property name="basePackage" value="com/jnshu/Mapper"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
</beans>
mapper代理
不用实现类的mybatis
在接口中直接定义方法
JDBC不使用db.properties:
JDBC使用db.properties:
创建一个JDBC工具类,使用ClassLoader加载Properties配置文件。然后在java程序中导入这个包
package Util;
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.sql.*;
import java.util.Properties;
/**
* JDBC工具类
*/
public class JDBCUtils {
private static String url;
private static String user;
private static String password;
private static String driver;
/**
* 文件的读取,只需要读取一次即可拿到这些值。使用静态代码块
*/
static {
//读取资源文件,获取值
try {
//1.创建Properties集合类
Properties pro = new Properties();
//获取src路径下的文件的方式--->ClassLoader 类加速器
ClassLoader classLoader = JDBCUtils.class.getClassLoader();
URL res = classLoader.getResource("jdbc.properties");
String path = res.getPath();
System.out.println(path);
//2.加载文件
// pro.load(new FileReader("src/yewubiao.properties"));
pro.load(new FileReader(path));
//3.获取数据,赋值
url = pro.getProperty("ur1");
user = pro.getProperty("user");
password = pro.getProperty("password");
driver = pro.getProperty("driver");
//4.注册驱动
Class.forName(driver);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 获取连接
* @return 连接对象
*/
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url, user, password);
}
/**
* 释放资源
* @param stmt
* @param conn
*/
public static void close(Statement stmt,Connection conn) {
if (stmt != null) {
try {
stmt.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if (conn != null) {
try {
stmt.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
/**
* 释放资源
* @param stmt
* @param conn
*/
public static void close(ResultSet rs,Statement stmt, Connection conn){
if (rs != null) {
try {
rs.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if (conn != null) {
try {
stmt.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
package jdbc;
import JDBCTest.emp;
import Util.JDBCUtils;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
/**
* 定义一个方法,查询emp表的数据将其封装为对象,然后装载集合,返回。
*/
public class TestJDBC7 {
public static void main(String[] args){
List<emp> list = new TestJDBC7().findAll2();
System.out.println(list);
System.out.println(list.size());
}
/**
* 演示JDBC的工具类
* @return
*/
public List<emp> findAll2() {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
List<emp> list = null;
try {
// //1.注册驱动
// Class.forName("com.mysql.jdbc.Driver");
// //2.获取连接
// try {
// conn = DriverManager.getConnection("jdbc:mysql:///yewubiao","root","wsj199599");
conn = JDBCUtils.getConnection();
//3.定义sql
String sql = "select * from emp";
//4.获取执行sql的对象
stmt = conn.createStatement();
//5.执行sql
rs = stmt.executeQuery(sql);
//6.遍历结果集,封装对象,装载集合
emp emp = null;
list = new ArrayList<emp>();
while (rs.next()){
//获取数据
int id = rs.getInt("id");
String ename = rs.getString("ename");
int job_id = rs.getInt("job_id");
int mgr =rs.getInt("mgr");
Date joindate = rs.getDate("joindate");
double bonus = rs.getDouble("bonus");
int dept_id = rs.getInt("dept_id");
emp = new emp();
emp.setId(id);
emp.setEname(ename);
emp.setJob_id(job_id);
emp.setMgr(mgr);
emp.setJoindate(joindate);
emp.setBonus(bonus);
emp.setDept_id(dept_id);
//装载集合
list.add(emp);
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
finally {
// if (rs !=null){
// try {
// rs.close();
// } catch (SQLException throwables) {
// throwables.printStackTrace();
// }
// }
// if (stmt !=null){
// try {
// rs.close();
// } catch (SQLException throwables) {
// throwables.printStackTrace();
// }
// }
// if (conn !=null){
// try {
// rs.close();
// } catch (SQLException throwables) {
// throwables.printStackTrace();
// }
// }
JDBCUtils.close(rs,stmt,conn);
}
return list;
}
}
明天计划的事情:
继续重做任务一
遇到的问题:
解决了
收获:
熟悉DEBUG,spring+mybatis,JDBC
评论