发表于: 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<UserfindAll();

}

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(sqluser.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(sqluser.getUserName()user.getPassword());
   }

   public String searchUser(int id) {// 简单查询,按照ID查询,返回字符串
       String sql "select userName from user where id = ? ";
       // 返回值类型为 String(String.class)
       return this.getJdbcTemplate().queryForObject(sqlString.class, id);
   }
   public List<UserfindAll() {
       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 rowNumthrows 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=(IUserDAOapplicationContext.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=(IUserDAOapplicationContext.getBean("userDao");
       dao.updateUser(user);
   }
   // 删除
   public void demo3(){
       ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
       IUserDAO dao=(IUserDAOapplicationContext.getBean("userDao");
       dao.deleteUser(1);
   }
   // 简单查询,返回字符串
   public void demo4(){
       ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
       IUserDAO dao=(IUserDAOapplicationContext.getBean("userDao");
       String name=dao.searchUser(10);
       System.out.println(name);
   }
   // 简单查询,返回对象
   public void demo5(){
       ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
       IUserDAO dao=(IUserDAOapplicationContext.getBean("userDao");
       User user=dao.serchUser(11);
       System.out.println(user.getUserName());
   }
   // 复杂查询,返回对象集合
   public void demo6(){
       ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
       IUserDAO dao=(IUserDAOapplicationContext.getBean("userDao");
       List<Userusers=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();
   }
}

输入:

1Spring 为每种持久化技术 提供一个支持类,在DAO 中注入 模板工具类
1JDBC org.springframework.jdbc.core.support.JdbcDaoSupport
2Hibernate3.0 org.springframework.orm.hibernate3.support.HibernateDaoSupport
3iBatis 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 rowNumthrows SQLException {
       // rs 已经指向每一条数据,不需要自己调用 next,将rs指向数据 转换 User对象
       User user = new User();
       user.setId(rs.getInt("id"));
       user.setName(rs.getString("name"));
       return user;
   }
}

查询单个对象<TT
queryForObject(String sqlRowMapper<TrowMapperObject... args)
return this.getJdbcTemplate().queryForObject(sql,new UserRowMapper(),id);
查询所有对象List集合<TList<Tquery(String sql,RowMapper<TrowMapper,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的基本流程.




返回列表 返回列表
评论

    分享到