一.使用JDBC代码:
public class User {
String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
//JDBC底层实现代码
public void testJDBC() {
Connection conn = null;
PreparedStatement psmt = null;
ResultSet rs = null;
//加载驱动
try {
Class.forName("com.mysql.jdbc.Driver");
//创建连接
conn = DriverManager.getConnection("jdbc:mysql:///mybatis","root","123456");
//编写sql语句
String sql = "select * from user where id>=?";
//预编译sql
psmt = conn.prepareStatement(sql);
//设置参数值
psmt.setString(1, "1");
//执行sql
rs = psmt.executeQuery();
//遍历结果集
while(rs.next()) {
//得到返回结果值
String username = rs.getString("username");
User user = new User();
user.setUsername(username);
System.out.println(username);
System.out.println(user);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
rs.close();
psmt.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
二.使用JdbcTempleate
操作的基本步骤:
- 导入jdbcTemplate使用的jar包
- 创建对象,设置设计库信息
- 创建jdbcTemplate对象,设置数据源
- 调用jdbcTemplate对象里面的方法实现操作
1.添加操作
//1.添加的操纵
public void add() {
//第一步 设置数据库的信息
DriverManagerDataSource dataSource =
new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql:///mybatis");
dataSource.setUsername("root");
dataSource.setPassword("123456");
//第二步 创建jdbcTemplate对象,设置数据源
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
//第三步 调用jdbcTemplate对象里面的方法实现操作
//创建sql语句
String sql = "insert into user values(?,?,?,?,?)";
int rows = jdbcTemplate.update(sql, "27","lucy",null,null,null);
System.out.println(rows);
}
2.修改操作
//2.修改操作
@Test
public void update() {
//第一步 设置数据库的信息
DriverManagerDataSource dataSource =
new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql:///mybatis");
dataSource.setUsername("root");
dataSource.setPassword("123456");
//第二步 创建jdbcTemplate
JdbcTemplate jdbctemplate = new JdbcTemplate(dataSource);
//第三步 调用jdbcTemplate里面的方法实现update方法
String sql = "update user set username=? where id=?";
int rows = jdbctemplate.update(sql, "tom","27");
System.out.println(rows);
}
3.删除操作
//3.删除操作
public void delete() {
//第一步 设置数据库的信息
DriverManagerDataSource dataSource =
new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql:///mybatis");
dataSource.setUsername("root");
dataSource.setPassword("123456");
//第二步 创建jdbcTemplate
JdbcTemplate jdbctemplate = new JdbcTemplate(dataSource);
//第三步 调用jdbcTemplate里面的方法实现update方法
String sql = "delete from user where id = ?";
int rows = jdbctemplate.update(sql,"27");
System.out.println(rows);
}
4.查询操作
1)查询返回一个值
查询表中有多少条记录
queryForObject(String sql, Class<Integer> requiredType)
requireType:要返回的类型
//查询第一个操作 查询返回一个值
public void testCount() {
//第一步 设置数据库的信息
DriverManagerDataSource dataSource =
new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql:///mybatis");
dataSource.setUsername("root");
dataSource.setPassword("123456");
//第二步 创建jdbcTemplate
JdbcTemplate jdbctemplate = new JdbcTemplate(dataSource);
//第三步 调用jdbcTemplate里面的方法实现update方法
String sql = "select count(*) from user";
//调用jdbcTemplate的方法
int count = jdbctemplate.queryForObject(sql, Integer.class);
System.out.println(count);
}
2)查询返回一个对象
queryForObject(String sql, RowMapper<User> rowMapper, Object... args)
public void testObject() {
//第一步 设置数据库的信息
DriverManagerDataSource dataSource =
new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql:///mybatis"); //数据库路径
dataSource.setUsername("root"); //设置用户名和密码
dataSource.setPassword("123456");
//第二步 创建jdbcTemplate
JdbcTemplate jdbctemplate = new JdbcTemplate(dataSource);
//第三步 调用jdbcTemplate里面的方法实现update方法
String sql = "select * from user where id=?";
//调用jdbcTemplate的方法
//第二个参数是接口RowMapper,需要自己写一个类实现接口
User user = jdbctemplate.queryForObject(sql, new MyRowMapper(),"1");
System.out.println(user.getUsername());
System.out.println(user);
}
class MyRowMapper implements RowMapper<User>{
@Override
public User mapRow(ResultSet rs, int num) throws SQLException {
// 1.从结果集中把数据得到
String username = rs.getString("username");
// 2.把得到数据封装到对象里面去
User user = new User();
user.setUsername(username);
return user;
}
}
3)查询返回一个列表
例如:select * form user;,此时返回的是一个列表,此时可以使用一个List集合来接收返回的对象。
List<User> list = jdbctemplate.query(sql,new MyRowMapper());
@Test
public void testList() {
//第一步 设置数据库的信息
DriverManagerDataSource dataSource =
new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql:///mybatis");
dataSource.setUsername("root");
dataSource.setPassword("123456");
//第二步 创建jdbcTemplate
JdbcTemplate jdbctemplate = new JdbcTemplate(dataSource);
//第三步 调用jdbcTemplate里面的方法实现update方法
String sql = "select * from user";
//调用jdbcTemplate的方法实现我们的操作
//第二个参数是接口RowMapper,需要自己写一个类实现接口
//三个方法,第一个是sql语句,第二个是RowMapper接口,自己写类实现数据封装,第三个可变参数
List<User> list = jdbctemplate.query(sql,new MyRowMapper()); //???????这里为什么进不去
System.out.println(list);
}
三.使用Spring的XML配置方式完成数据操作
1)配置c3p0连接池
- 使用new创建的方式创建连接池
public void testLianJieChi() {
ComboPooledDataSource dataSource =
new ComboPooledDataSource();
try {
//设置C3P0连接池信息代码中的实现
//加载驱动
dataSource.setDriverClass("com.mysql.jdbc.Driver");
//数据库的路径
dataSource.setJdbcUrl("jdbc:mysql:///books");
//设置用户名
dataSource.setUser("root");
//设置密码
dataSource.setPassword("123456");
} catch (PropertyVetoException e) {
e.printStackTrace();
}
}
根据命名规则,从setDriverClass方法可以看出,有一个属性名为driverClass(第一个字母小写)。
- 使用xml配置方式:
<!-- 配置c3p0的链接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!-- 注入属性值 -->
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql:///mybatis"></property>
<property name="user" value="root"></property>
<property name="password" value="123456"></property>
</bean>
2)定义和创建dao类
- 定义UserDao类:
public class UserDao {
//得到JdbcTemplate对象
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public void add() {
String sql = "insert into user values(?,?,?,?,?)";
jdbcTemplate.update(sql,27,"tom",null,null,null);
}
}
- 使用xml配置方式创建UserDao类对象:
<!-- 创建Dao对象 -->
<bean id="userDao" class="jdbctemplatexml.UserDao">
<property name="jdbcTemplate" ref="jdbcTempate"></property>
</bean>
- 使用配置方式创建jdbcTemple对象
<!-- 创建jdbcTemplate模板对象 -->
<bean id="jdbcTempate" class="org.springframework.jdbc.core.JdbcTemplate">
<!-- 把dataSource传递到模板对象里面去 -->
<property name="dataSource" ref="dataSource"></property>
</bean>
其中c3p0连接池已经在上面创建了。
3)定义和创建Service类对象
- 定义Service类
public class UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void add() {
userDao.add();
}
}
- 使用xml配置方式创建Service对象
<bean id="userService" class="jdbctemplatexml.UserService">
<!-- 注入Dao对象 -->
<property name="userDao" ref="userDao"></property>
</bean>
4)测试类
public class TestJdbcTemplate {
@Test
public void testDemo() {
ApplicationContext context =
new ClassPathXmlApplicationContext("c3p0.xml");
UserService service = (UserService) context.getBean("userService");
service.add();
}
}