Spring使用纯注解进行增删改查操作
首先先来说一下我们待会会用到的一些注解,希望大家能记住哈
1.@Configuration
作用:替代Spring中的xml文件
该注解标记类,被标记的类就是Spring的一个主类,当容器创建的时候就会从该类上加载注解.
2.@ComponentScan
作用:用来替代组件扫描,能一下扫描包下所有的类与接口
<context:component-scan base-package="com.zhiyou100"/>
被该注解标记的类可以进行组件扫描,使用value属性来识别包名
3.@PropertySource
作用:就是用来导入 db.properties等数据源文件到Spring容器中
等价于<context:property-placeholder location="classpath:db.properties"/>
4.@Bean
作用:用来在Spring容器中构建对象
等价于xlm,配置中的<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"/>
5@Import
作用:就是用来映入其他配置文件
等价于
<import resource = "classpath:db.properties"/>
先给你们看看包分布情况
主配置类的代码
/**
* @author: admin
* @date: 2021/3/5
*
* Spring的主配置类
*/
@Configuration //看见没被这个修饰的就是主配置类了
@ComponentScan("com.zhiyou100") //这个就是我给你们说的扫描注解 可以扫描一个包刺下所有的类加载大哦容器里面来
@PropertySource("classpath:db.properties")//这个就是加载注解,能够把文件里面的数据加载到Spring容器里面来
@Import(JDBCUtil.class)//这就是引入,把其他的配置文件或者类引入到我们的spring容器里面
public class SpringConfiguration {
}
JDBCUtil类代码
/**
* @author: admin
* @date: 2021/3/5
* 配置连接池 连接 工具类等信息
*/
public class JDBCUtil {
//@Value 赋值,这里使用赋值没把Spring内存里面的数据,通过变量拿到类中使用
@Value("${jdbc.driverClass}")
private String driverClass;
@Value("${jdbc.jdbcUrl}")
private String jdbcUrl;
@Value("${jdbc.user}")
private String user;
@Value("${jdbc.password}")
private String password;
//假定使用C3P0连接池
// 创建ComboPooledDataSource对象进入Spring容器中
@Bean(name = "dataSource")
public DataSource getDataSource(){
// 构建ComboPooledDataSource对象 手动注入数据源信息
ComboPooledDataSource dataSource = new ComboPooledDataSource();
try {
dataSource.setDriverClass(driverClass);
dataSource.setJdbcUrl(jdbcUrl);
dataSource.setUser(user);
dataSource.setPassword(password);
} catch (PropertyVetoException e) {
e.printStackTrace();
}
return dataSource;
}
@Bean(name = "jdbcTemplate")//我们扫描进去的事类,这是把类的构建对象并拿出来使用
/* @Autowired
@Resource 不能放到参数上
@Qualifier*/
public JdbcTemplate createJdbcTemplate(@Autowired DataSource dataSource){
JdbcTemplate jdbcTemplate = new JdbcTemplate();
jdbcTemplate.setDataSource(dataSource);
return jdbcTemplate;
}
Userpojo类的代码
/**
* @author: admin
* @date: 2021/3/5
*
* JavaBean
*/
@Component("user")//@ComponentScan的扫描就是扫描这个注解,谁有这个注解谁就被扫描到Spring内存中去 这个注解的作用就是把类交给Spring内存
public class User implements Serializable {
/*这些都是在给属性赋值*/
@Value("1")
private Integer u_id;
@Value("小孙")
private String u_name;
@Value("20")
private Integer u_age;
@Value("10000")
private Double u_salary;
dao接口
// dao接口
public interface UserDao {
//CRUD
// 添加用户
void addUser(User user);
// 删除用户 根据id值
void deleteUserById(int uid);
// 修改用户信息 根据id值
void updateUserById(User user);
// 查询所有用户
List<User> queryAllUsers();
// 查询单个用户 根据id值
User queryUserById(int uid);
// 分页+模糊查询
List<User> queryFuzzyUserByUsername(String u_name,int beginIndex);
// 查询总记录值
int queryUserCount();
}
UserDaoImpl的代码
/**
* @author: admin
* @date: 2021/3/5
*
* UserDao 接口实现类
*/
@Repository("userDao")//@ComponentScan的扫描就是扫描这个注解,谁有这个注解谁就被扫描到Spring内存中去 这个注解的作用就是把类交给Spring内存
public class UserDaoImpl implements UserDao {
//我们之前在JDBCUtil类里面使用的目的就是如此,如果不如此我们是绝对赋值不进去的
@Autowired //前提是Spring容器含有该对象
private JdbcTemplate jdbcTemplate;
// 对于数据库来说 增删改 都是更新
@Override
public void addUser(User user) {
// 添加用户 u_name u_age u_salary
int num = jdbcTemplate.update("insert into user values(null,?,?,?)", user.getU_name(), user.getU_age(), user.getU_salary());
if (num > 0) {
System.out.println("数据添加成功!");
} else {
System.out.println("数据添加失败!");
}
}
@Override
public void deleteUserById(int uid) {
int num = jdbcTemplate.update("delete from user where u_id = ?", uid);
if (num > 0) {
System.out.println("数据删除成功!");
} else {
System.out.println("数据删除失败!");
}
}
// 更新用户名和年龄
@Override
public void updateUserById(User user) {
int num = jdbcTemplate.update("update user set u_name = ?,u_age = ? where u_id = ?", user.getU_name(), user.getU_age(), user.getU_id());
if (num > 0) {
System.out.println("数据更新成功!");
} else {
System.out.println("数据更新失败");
}
}
@Override
public List<User> queryAllUsers() {
List<User> users = null;
try {
// BeanPropertyRowMapper 装配多条记录
users = jdbcTemplate.query("select * from user", new BeanPropertyRowMapper<>(User.class));
} catch (Exception e) {
e.printStackTrace();
}
return users;
}
@Override
public User queryUserById(int uid) {
// 根据用户id值查询一条记录 queryForObject方法
User user = null;
try {
user = jdbcTemplate.queryForObject("select * from user where u_id = ?", new BeanPropertyRowMapper<>(User.class), uid);
}catch (Exception e) {
e.printStackTrace();
}
return user;
}
// 分页+模糊查询
@Override
public List<User> queryFuzzyUserByUsername(String u_name, int beginIndex) {
List<User> users = null;
try {
users = jdbcTemplate.query("select * from user where u_name like '%' ? '%' limit ?,3", new BeanPropertyRowMapper<>(User.class),u_name,beginIndex);
}catch (Exception e){
e.printStackTrace();
}
return users;
}
@Override
public int queryUserCount() {
// 需要返回一个数值 queryForObject 后面传入Integer.class字节码对象
int count = jdbcTemplate.queryForObject("select count(*) from user", Integer.class);
return count;
}
}```