发表于: 2018-04-08 00:58:03
4 853
今天完成的事情:使用mvc模型创建jdbc给mysql数据库添加记录.
刚回武汉一直有事,而且任务17的过程中发现很多基础都不会,充电了一下,今天开始继续日报.
1.创建一张表jnshu_goddess,结构如下:
2.分析
a).jdbc三大步骤:
1).加载驱动.
2).获取数据库连接.
3).对数据库进行增删查改.
b).使用mvc模型,这个上手快一点.
3.创建jdbc maven项目
a).添加mysql驱动:
b).创建DB层进行数据库连接:
c).创建模型层(注意:Date使用的是util包中的Date,不是mysql中的.)
d).创建dao层,操作数据(注意Date数据的格式转换,今天只实现了添加与查询数据,明天把所有的都补齐.)
e).测试类.
f).测试:
1).默认数据
2).清空数据
3).测试,成功插入1000条数据
JDBCTemplate的基本连接方式:
JDBCTemplate.java
package com.jnshu.test;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
public class JDBCTemplate {
public void demo(){
DriverManagerDataSource dateSoure = new DriverManagerDataSource();
dateSoure.setDriverClassName("com.mysql.jdbc.Driver");
dateSoure.setUrl("jdbc:mysql://localhost:3306/jnshu_goddess&useSSL=true");
dateSoure.setUsername("root");
dateSoure.setPassword("123456");
JdbcTemplate jdbcTemplate = new JdbcTemplate(dateSoure);
jdbcTemplate.execute("create table temp(id int primary key,name varchar(32))");
}
}
简单的dao模式:
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--数据源配置-->
<!--JdbcTemplate的使用需要有DataSource的支持,所以在配置文件中,我们首先要配置一个DataSource-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<!--useSSL=true 打开ssl连接,去掉Establishing SSL告警-->
<property name="url" value="jdbc:mysql://127.0.0.1:3306/jnshu_goddess?useSSL=true"></property>
<property name="username" value="root"></property>
<property name="password" value="123456"></property>
</bean>
<!--将DataSource配置到JdbcTemplate里-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--将JdbcTemplate配置进DAO层-->
<bean id="userDao" class="com.jnshu.impl.UserDAOImpl">
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean></beans>
mysql> show create table user;
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| user | CREATE TABLE `user` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`userName` varchar(100) NOT NULL,
`passWord` varchar(200) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8 |
User.java
package com.jnshu.vo;
public class User {
private Integer id;
private String userName;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
IUserDAO.java
package com.jnshu.dao;
import com.jnshu.vo.User;
import java.util.List;
public interface IUserDAO {
public void addUser(User user);
public void deleteUser(int id);
public void updateUser(User user);
public String searchUser(int id);
public User serchUser(int id);
public List<User> findAll();
}
UserDAOImpl.java
package com.jnshu.dao.impl;
import com.jnshu.dao.IUserDAO;
import com.jnshu.vo.User;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
public class UserDAOImpl extends JdbcDaoSupport implements IUserDAO {
public void addUser(User user) {
String sql = "insert into user(userName,password) values(?,?)";
this.getJdbcTemplate().update(sql, user.getUserName(),user.getPassword());
}
public void deleteUser(int id) {
String sql = "delete from user where id = ?";
this.getJdbcTemplate().update(sql,id);
}
public void updateUser(User user) {
String sql = "update user set password=? where userName =?";
this.getJdbcTemplate().update(sql, user.getUserName(), user.getPassword());
}
public String searchUser(int id) {// 简单查询,按照ID查询,返回字符串
String sql = "select userName from user where id = ? ";
// 返回值类型为 String(String.class)
return this.getJdbcTemplate().queryForObject(sql, String.class, id);
}
public List<User> findAll() {
String sql = "select * from user";
return this.getJdbcTemplate().query(sql,new UserRowMapper());
}
public User serchUser(int id) {
String sql = "select * from user where id = ?";
return this.getJdbcTemplate().queryForObject(sql, new UserRowMapper(), id);
}
class UserRowMapper implements RowMapper<User> {
// rs为返回的结果集,以每行为单位进行封装
public User mapRow(ResultSet rs, int rowNum) throws SQLException{
User user = new User();
user.setId(rs.getInt("id"));
user.setUserName(rs.getString("username"));
user.setPassword(rs.getString("password"));
return user;
}
}
}
jdbcTemplatetest.java
package com.jnshu.dao.impl;
import com.jnshu.dao.IUserDAO;
import com.jnshu.vo.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.List;
public class jdbcTemplatetest {
// 增加数据
public void demo1(){
User user=new User();
user.setUserName("admin");
user.setPassword("123456");
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
IUserDAO dao=(IUserDAO) applicationContext.getBean("userDao");
dao.addUser(user);
}
// 修改数据
public void demo2(){
User user=new User();
user.setUserName("admin");
user.setPassword("admin");
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
IUserDAO dao=(IUserDAO) applicationContext.getBean("userDao");
dao.updateUser(user);
}
// 删除
public void demo3(){
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
IUserDAO dao=(IUserDAO) applicationContext.getBean("userDao");
dao.deleteUser(1);
}
// 简单查询,返回字符串
public void demo4(){
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
IUserDAO dao=(IUserDAO) applicationContext.getBean("userDao");
String name=dao.searchUser(10);
System.out.println(name);
}
// 简单查询,返回对象
public void demo5(){
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
IUserDAO dao=(IUserDAO) applicationContext.getBean("userDao");
User user=dao.serchUser(11);
System.out.println(user.getUserName());
}
// 复杂查询,返回对象集合
public void demo6(){
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
IUserDAO dao=(IUserDAO) applicationContext.getBean("userDao");
List<User> users=dao.findAll();
System.out.println(users.size());
}
}
test.java
package com.jnshu.test;
import com.jnshu.dao.impl.jdbcTemplatetest;
public class test {
public static void main(String[] args) {
// com.jnshu.test.JDBCTemplate jdbcTemplate = new com.jnshu.test.JDBCTemplate();
// jdbcTemplate.demo();
jdbcTemplatetest jdbcTemplatetest = new jdbcTemplatetest();
jdbcTemplatetest.demo1();
jdbcTemplatetest.demo2();
jdbcTemplatetest.demo3();
jdbcTemplatetest.demo4();
jdbcTemplatetest.demo5();
jdbcTemplatetest.demo6();
}
}
输入:
1、Spring 为每种持久化技术 提供一个支持类,在DAO 中注入 模板工具类
(1)JDBC :org.springframework.jdbc.core.support.JdbcDaoSupport
(2)Hibernate3.0 :org.springframework.orm.hibernate3.support.HibernateDaoSupport
(3)iBatis :org.springframework.orm.ibatis.support.SqlMapClientDaoSupport
用户自己编写DAO 只需要继承 JdbcDaoSupport, 就可以注入 JdbcTemplate
2、 通过jdbcTemplate 提供 int update(String sql,Object...args)实现增加 、修改 、删除
3、简单查询,返回原始数据类型, String类型
String sql="select count(*) from user"; // int queryForInt(String sql)
String sql="select name from user where id = ? "; // <T> T queryForObject(String sql, Class<T> requiredType, Object... args)
4、 复杂查询
JdbcTemplate 没有handler, 手动完成对象封装
编写实体类 RowMapper
class UserRowMapper implements RowMapper<User> {
@Override
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
// rs 已经指向每一条数据,不需要自己调用 next,将rs指向数据 转换 User对象
User user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
return user;
}
}
查询单个对象<T> T
queryForObject(String sql, RowMapper<T> rowMapper, Object... args)
return this.getJdbcTemplate().queryForObject(sql,new UserRowMapper(),id);
查询所有对象List集合<T> List<T> query(String sql,RowMapper<T> rowMapper,Object...args)
return this.getJdbcTemplate().query(sql,new UserRowMapper());
明天计划的事情:
完善优化今天的jdbc,添加修改和删除以及控制层.spring 的bean配置得看看,还有注入的概念,做完Mybatis连接Mysql数据库后跟着任务开始尝试做Junit,每次用main函数测试比较麻烦.
遇到的问题:
a).使用的mvc模型,,查阅了mvc的相关资料,dao模型太深了,明天看.
b).将util类型的Date转换为sql类型的Date,util.Date是sql.Date的父类,根据向上转型的原理可以很简单的知道 sql.Date -> util.Date 是可行的,不用做转换都可以,但是如果想要将util.Date转化为sql.Date,是不存在向下直接转型的!解决方法:sql.Date里面有个构造方法:Date(long date),在util.Date里面有一个为过期的方法:getTime() ,使用new java.sql.Date(date1.getTime()),即可将util.Date的date1转换为sql.Date类型.参考网址
c).之前没碰过spring,跟着资料走的.http://www.cnblogs.com/myitroad/p/5517000.html,spring依赖注入是什么,接口用的还不太熟练,理解的不深刻,要学习的好多,每天都有点头大.
收获:jdbc(原生)基本的连接过程,mvc模型,util.Date转化为sql.Date.初步认识了spring依赖注入,知道了jdbcTemplatetest的基本流程.
评论