即Java Database Connectivity,它是提供了一组Java API来访问关系数据库的Java程序。
UTF-8
1.7
1.7
5.2.5.RELEASE
org.springframework
spring-tx
${spring.version}
org.springframework
spring-context
${spring.version}
org.springframework
spring-test
${spring.version}
junit
junit
4.12
org.aspectj
aspectjweaver
1.8.9
org.springframework
spring-aop
${spring.version}
mysql
mysql-connector-java
5.1.38
commons-dbcp
commons-dbcp
1.4
org.springframework
spring-jdbc
${spring.version}
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring_jdbcdb?useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=123456
在beans.xml文件里面引入properties配置文件
这里有两种方式。
DROP DATABASE IF EXISTS spring_jdbcdb;
create database spring_jdbcdb DEFAULT CHARACTER SET UTF8 COLLATE utf8_general_ci;
USE spring_jdbcdb;
GRANT ALL ON spring_jdbcdb.* TO 'lu'@'localhost' IDENTITY BY '123456';
CREATE TABLE t_user(
id int(10)PRIMARY KEY AUTO_INCREMENT,
user_name VARCHAR (100),
pass_word VARCHAR (100),
nick_name VARCHAR (100),
gid INT
);
CREATE TABLE t_group(
id INT (10)PRIMARY KEY AUTO_INCREMENT,
group_name VARCHAR (100)
)
使用idea执行sql脚本需要配置data source
连接之后,sql脚本文件空白处右键,run
3. 直接在navicat里面手动创建或新建查询执行sql语句进行创建
public class User {
private int id;
private String username;
private String password;
private String nickname;
private int gid;
private Group group;
.
.省略get和set方法以及构造方法
.
创建一个接口,定义增删改查的方法,再写一个实现类,在里面编写具体方法
public interface IUserDao {
public void add(User user, int gid);
public void delete(int id);
public void update(User user);
public User load(int id);
// public List list(String sql,Object[] args);
public List list();
}
JDBCTemplate位于spring-jdbc的包里面
其全名为org.springframework.jdbc.core.JdbcTemplate
execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句。
update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;
query方法及queryForXXX方法:用于执行查询相关语句;
call方法:用于执行存储过程、函数相关语句。
在实现类里面
@Repository("UserDao")
public class UserDao implements IUserDao {
private JdbcTemplate jdbcTemplate;
@Autowired
public void init(DataSource dataSource){
this.jdbcTemplate=new JdbcTemplate(dataSource);
}
@Override
public void add(User user, int gid) {
String sql="Insert into t_user(user_name,pass_word,nick_name,gid) value (?,?,?,?)";
jdbcTemplate.update(sql,user.getUsername(),user.getPassword(),user.getNickname(),user.getGid());
}
@Override
public void delete(int id) {
String sql="delete from t_user where id=?";
jdbcTemplate.update(sql,id);
}
@Override
public void update(User user) {
String sql="update t_user set nick_name=? where id=?";
jdbcTemplate.update(sql,user.getNickname(),user.getId());
}
JdbcTemplate对象提供了query方法及queryForXXX方法,用于执行查询相关语句。因此这里用queryForObject方法。
查询操作涉及到我使用了一个RowMapper。
sping中的RowMapper可以将数据中的每一行数据封装成用户定义的类。
通过建立内部类实现RowMapper接口,RowMapper中有一个mapRow方法,所以实现RowMapper接口一定要实现mapRow方法,而对自定义类的包装就在mapRow方法中实现。
public class UserRowMapper implements RowMapper {
@Nullable
@Override
public User mapRow(ResultSet resultSet, int i) throws SQLException {
User u=new User();
u.setUsername(resultSet.getString(2));
u.setPassword(resultSet.getString(3));
u.setNickname(resultSet.getString(4));
u.setGid(resultSet.getInt(5));
return u;
}
}
2.编写查询单个用户的方法
@Override
public User load(int id) {
String sql="select * from t_user where id=?";
UserRowMapper rowMapper=
new UserRowMapper();
Object[] params=new Object[]{id};
User u =jdbcTemplate.queryForObject(sql,params,rowMapper);
return u;
}
@Override
public List list() {
String sql1="select * from t_user";
UserRowMapper rowMapper=
new UserRowMapper();
List list
=jdbcTemplate.query(sql1,rowMapper);
return list;
}