Spring 的 jdbc 与 Hibernate,Mybatis 相比较, 功能不是特别强大, 但是在小型项目中, 也到还是比较灵活简单.
首先可以看看一下传统的 jdbc 是如何操作的呢
传统 JDBC
首先呢先要创建一个 bean 实例, 例如 Student.java
- public class Student {
- private Integer id;
- private String name;
- private String password;
- public Integer getId() {
- return id;
- }
- public void setId(Integer 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;
- }
- }
为了方便简单, 直接在 main 里面创建数据源的连接了
- import org.apache.commons.dbcp.BasicDataSource;
- import org.springframework.jdbc.core.JdbcTemplate;
- public class TestJdbc {
- public static void main(String[] args) {
- // 创建数据源连接池
- BasicDataSource dataSource = new BasicDataSource();
- dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
- dataSource.setUrl("jdbc:mysql://localhost:3306/stu?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true");
- dataSource.setUsername("root");
- dataSource.setPassword("123456");
- // 创建 jdbc 模板
- JdbcTemplate jdbcTemplate = new JdbcTemplate();
- jdbcTemplate.setDataSource(dataSource);
- // 通过 API 操作执行 sql
- jdbcTemplate.update("insert into student(stu_name,stu_pwd) values(?,?);", "jack","46asd4634");
- }
- }
因为我这里使用的是 mysql8.0, 所以驱动名和 url 有所不一样, 可以参考 https://www.cnblogs.com/zhangyuanbo/p/11248334.html
以上就是传统的 JDBC 操作数据库, 然后我们用 Spring 的 xml 来配置一下, 现在用的是 DBCP 连接池来测试的:
步骤类似, 先创建实体类 Student.java, 然后需要一个 StudentDao.java, 简单一点, 什么接口类实现类 Service 的, 通通不要了, 这些做起来应该也不是什么难事吧.
要操作数据库, 当然要有 CRUD 什么的啦, 那就整一个 update()方法吧
- public void update(Student stu) {
- String sql = "update student set stu_name=? where stu_id=?";
- Object[] pro = {stu.getName(),stu.getId()};
- jdbcTemplate.update(sql, pro);
- }
我这里是根据 Id 来执行修改操作的, jdbc 模板的方法有很多
我用的是这里红框框的方法, 第一个参数很显然啦, 意思就是你操作数据库执行的 sql 语句, 第二个就是 sql 中要传的参数, 比如我这里的 sql"update student set stu_name=? where stu_id=?", 参数就是 stu_name 和 stu_id.
哦, 对了, 有一件很重要的事情, 可不要忘了 JdbcTemplate 了, 不创建一下, 给个 setter()方法的话, 就会报错的 --"jdbcTemplate is not writable or has an anvalid setter method..............", 很明显告诉我们需要一个 jdbcTemplate 的 setter()方法呀, 所以完整的 StudentDao.java 就写成这样:
- import org.springframework.jdbc.core.JdbcTemplate;
- public class StudentDao {
- private JdbcTemplate jdbcTemplate;
- public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
- this.jdbcTemplate = jdbcTemplate;
- }
- public void update(Student stu) {
- String sql = "update student set stu_name=? where stu_id=?";
- Object[] pro = {stu.getName(),stu.getId()};
- jdbcTemplate.update(sql, pro);
- }
- }
再整一个 bean.xml 呗, 当然了, 实际项目中可不这样命名, 一般是 "applicationContext.xml", 这里就随意了, 怎么简单方便怎么来
在写 xml 的时候, 比如 "<bean id="dataSource"class="org.apache.commons.dbcp.BasicDataSource"></bean>", 在 class="" 这里面按 alt+/ 没有代码提示很烦, 像我这样不喜欢敲这么长一串的人来说, 特别记忆力又不好, 一不小心敲错了, 最后报错了呀, 找起来也烦. 于是, 还可以这样来解决:
Windows→Preferences
里面那个红 ** 请忽略, 网络代理问题, 与这个项目无关. 再点 "Add":
注意: 外部引用的是你要使用的炸包 (jar) 对应的 ".xsd" 格式文件, 最后点确定就可以了. 效果如下:
有意思吧, 方便吧, 懒癌患者的福音啊!!!!
咳咳咳, 说正事, 回到我们的 bean.xml 的写法
为了好理解, 我们就倒着来写吧, 以后就顺着写咯
首先肯定要配置 Dao 的 bean
- <bean id="studentDao" class="com.yuanbo.xml.StudentDao">
- <property name="jdbcTemplate" ref="jdbcTemplate"></property>
- </bean>
怎么 ide 里的格式好好地, 复制过来就这样了, 算了, 懒得改了, 继续一顿操作
我们把 jdbcTemplate 注入到这个 Dao 的 bean 中, 那么, 必须要有一个 jdbcTemplate 的 bean 撒,
也可以从最开始的传统 IDBC 可以看到, 我们不是 new 了一个 jdbcTemplate 嘛, 一看到 new, 那
么, 改成 xml 配置文件形式, 得整一个相对应的 bean 出来撒, 于是, 吧啦啦啦, 整出来了:
- <!-- 创建模板, 注入数据源 -->
- <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
- <property name="dataSource" ref="dataSource"></property>
- </bean>
你看吧, 现在格式又好好的了,,,,,,emmmm, 想起来了, 好像是复制的时候没有从定
格复制, 少复制了一个 "Tab", 算求了, 无关紧要, 没得啥子强迫症
模板里面必须要注入 jdbcTemplate 哦, 从传统 JDBC 这里 "jdbcTemplate.setDataSource(dataSource);"
有了 set 方法, 就要想到, 那得注入了呀不是, 注入就等同于 set
既然注入了, 那不是还缺少一个 dataSource 呀, 这还不洒洒水啊, 明显需要再整一个数据源的 bean 撒, 吧啦啦啦啦, 小魔仙, 全身变! 出来吧
- <!-- 配置数据源 -->
- <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
- <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
- <property name="url" value="jdbc:mysql://localhost:3306/stu?serverTimezone=GMT+8"></property>
- <property name="username" value="root"></property>
- <property name="password" value="123456"></property>
- </bean>
哦, 对了, 有一个块选中的快捷键, shift+alt+a, 就可以了, 其实我还是喜欢代码对齐的, 可读性必须高,
写代码的基本准则. 再按一下组合键就可以退出当前模式了
这里的 url 不要在意, mysql8.0 的 url 写法又好几种, 这是比较随意的写法
最后看看 bean.xml 的完整代码:
- <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.xsd">
- <!-- <context:property-placeholder location="classpath:com/yuanbo/xml/jdbc.properties"/> -->
- <!-- 配置数据源 -->
- <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
- <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
- <property name="url" value="jdbc:mysql://localhost:3306/stu?serverTimezone=GMT+8"></property>
- <property name="username" value="root"></property>
- <property name="password" value="123456"></property>
- </bean>
- <!-- 创建模板, 注入数据源 -->
- <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
- <property name="dataSource" ref="dataSource"></property>
- </bean>
- <!-- 配置 Dao -->
- <bean id="studentDao" class="com.yuanbo.xml.StudentDao">
- <property name="jdbcTemplate" ref="jdbcTemplate"></property>
- </bean>
- </beans>
注释的别管, 我把数据源里面属性提出来放到. properties 文件里, 注释掉的这句话就有用了.
最后, 来个测试类吧
- import org.junit.Test;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.ConfigurableApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- public class TestDBCP {
- @Test
- public void demo01() {
- Student stu = new Student();
- String xmlPath = "com/yuanbo/xml/beans.xml";
- ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
- StudentDao dao = (StudentDao) applicationContext.getBean("studentDao");
- stu.setName("ali");
- stu.setId(2);
- dao.update(stu);
- ((ConfigurableApplicationContext)applicationContext).close();
- }
- }
好像还忘记了啥东西, 哦, 是了, 贴上数据库的吧
还有炸包
来源: https://www.cnblogs.com/zhangyuanbo/p/11249670.html