Spring框架基于注解开发CRUD详解
作者:砖厂打工仔 发布时间:2021-08-04 03:39:03
标签:Spring,注解,CRUD
Spring框架基于注解开发CRUD,供大家参考,具体内容如下
1. Maven坐标
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
<!-- SpringJDBC jar包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
<!-- spring整合junit jar包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.0.RELEASE</version>
<scope>test</scope>
</dependency>
<!-- Lombok jar包 -->
<dependency>
<scope>compile</scope>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
</dependency>
<!--单元测试jar包-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!-- mysql数据库jar包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
<scope>runtime</scope>
</dependency>
2. 实体类
@Data
@Component
//等价于 <bean id="user" class="org.westos.pojo.User"/>
public class User {
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;
}
3. Spring配置类
用于代替原来的SpringIOC
@Configuration
@ComponentScan(value = "org.westos")
@PropertySource("classpath:jdbcConfig.properties")
public class MyConfig {
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
//注入数据源
@Bean("dataSource")
public DataSource createDataSource() {
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setUsername(username);
ds.setPassword(password);
return ds;
}
@Bean("jdbcTemplate")
//注入JDBCtemplate模板
public JdbcTemplate createJdbcTemplate(DataSource dataSource){
return new JdbcTemplate(dataSource);
}
}
4. 业务层代码
接口
public interface UserService {
//查询所有用户
List<User> findAll();
//根据id查询用户
User findUserById(Integer uid);
//保存用户
void save(User user);
//更新用户
void update(User user);
//删除用户
void delete(Integer uid);
}
实现类
@Service("userService")
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
//查询所有用户
public List<User> findAll() {
List<User> list = userDao.findAll();
return list;
}
//根据id查询用户
public User findUserById(Integer uid) {
User user = userDao.findUserById(uid);
return user;
}
//保存用户
public void save(User user) {
userDao.save(user);
}
//更新用户
public void update(User user) {
userDao.update(user);
}
//删除用户
public void delete(Integer uid) {
userDao.delete(uid);
}
}
5. 持久层代码
接口
public interface UserDao {
//查询所有
List<User> findAll();
//根据id查询
User findUserById(Integer uid);
//保存
void save(User user);
//更新
void update(User user);
//删除
void delete(Integer uid);
}
实现类
@Repository("userDao")
public class UserDaoImpl implements UserDao {
@Autowired
private JdbcTemplate jdbcTemplate;
//查询所有
public List<User> findAll() {
return jdbcTemplate.query("select * from user", new BeanPropertyRowMapper<User>(User.class));
}
//根据id查询
public User findUserById(Integer uid) {
return jdbcTemplate.queryForObject("select * from user where id=?", new BeanPropertyRowMapper<User>(User.class), uid);
}
//保存
public void save(User user) {
jdbcTemplate.update("insert into user(username,birthday,sex,address) values (?,?,?,?)", user.getUsername(), user.getBirthday(), user.getSex(), user.getAddress());
}
//更新
public void update(User user) {
jdbcTemplate.update("update user set username=?,birthday=?,sex=?,address=? where id = ?", user.getUsername(), user.getBirthday(), user.getSex(), user.getAddress(), user.getId());
}
//删除
public void delete(Integer uid) {
jdbcTemplate.update("delete from user where id=?", uid);
}
}
6. jdbc配置文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis_test
jdbc.username=root
jdbc.password=123
7. 测试类代码
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = MyConfig.class)
public class MyTest {
@Autowired
private UserService userService;
@Autowired
private User user;
@Test
public void findAllTest(){
List<User> list = userService.findAll();
for (User user : list) {
System.out.println(user);
}
}
@Test
public void findUserByIdTest(){
User user = userService.findUserById(74);
System.out.println(user);
}
@Test
public void saveUserTest(){
user.setUsername("张三");
user.setBirthday(new Date());
user.setSex("女");
user.setAddress("西安市长安区");
userService.save(user);
}
@Test
public void updateUserTest(){
user.setId(75);
user.setUsername("李四");
user.setBirthday(new Date());
user.setSex("女");
user.setAddress("西安市雁塔");
userService.update(user);
}
@Test
public void deleteUserTest(){
user.setId(75);
userService.delete(user.getId());
}
}
8. 工程目录
来源:https://blog.csdn.net/weixin_42456748/article/details/109923288
0
投稿
猜你喜欢
- 前言前面说到在我们应对高并发的场景,请求量过于大的情况下给我们服务器的压力很多,造成缓存穿透、击穿、雪崩,那么我们采用布隆过滤器,有兴趣的小
- 下面的这些都算是比较高级的问题了,面试中一般也很少问到,因为它们可能会把面试者拒之门外。不过你可以自己找个时间来实践一下。 1.
- 本文实例为大家分享了Java单例模式利用HashMap实现缓存数据的具体代码,供大家参考,具体内容如下一、单例模式是什么?单例模式是一种对象
- 1、lock是可中断锁,而synchronized 不是可中断锁线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放对O的锁
- 第一种方法:string s=abcdeabcdeabcde;string[] sArray=s.Split(c) ;foreach(str
- 本文为大家分享了Spring Boot全局异常处理,供大家参考,具体内容如下1、后台处理异常a、引入thymeleaf依赖<!-- t
- 本文实例讲述了Java Swing实现窗体添加背景图片的2种方法。分享给大家供大家参考,具体如下:在美化程序时,常常需要在窗体上添加背景图片
- 最近要做动态数据的提交处理,即需要分析提交数据字段定义信息后才能明确对应的具体字段类型,进而做数据类型转换和字段有效性校验,然后做业务处理后
- 前言在公司的图书馆项目中曾经用过截取字符串的方法,项目是java语言的;最近在公司的另一个项目中又需要截取字符串,一种环境是C#语言,一种环
- System.Collections.ArrayList类是一个特殊的数组。通过添加和删除元素,就可以动态改变数组的长度。一.优点1. 支持
- 很多App都有这种效果,特别一些电商类的App,顶部每隔几秒钟会向右翻页显示下张图片,用来作推广或者内容展示用的。今天来简单地模仿一下,还自
- 自己整理了 spring boot 结合 Redis 的工具类引入依赖<dependency> <groupI
- Java环境部署下载所需软件和依赖安装 jdk路径可选别的盘。但是指向时得注意我自己时装在 F 盘的,在f盘里新建文件夹 Java,Java
- 特性一:委托委托是C#语言 * 有的概念,相当于C/C++中的函数指针,与C/C++中函数指针的不同之处是:委托是面向对象的、类型安全的和保险
- 目录一、.NET 体系结构二、Hello world三、类型和变量四、程序结构前言:C#(读作“See Sharp”)是一种新式编程语言,不
- 本文实例讲述了Android开发实现模仿微信小窗口功能。分享给大家供大家参考,具体如下:运用方法:将显示窗口的风格 设置为对话框风格即可具体
- 因为一直用spring整合了mybatis,所以很少用到mybatis的session缓存。 习惯是本地缓存自己用map写或者引入第三方的本
- 目录1. SpringMVC默认三个异常处理类2. @ExceptionHandler注解异常3. @ResponseStatus注解异常4
- SwipeRefreshLayout是Android官方的下拉刷新控件,使用简单,界面美观,不熟悉的朋友可以随便搜索了解一下,这里就不废话了
- 我们在设计layout的时候,使用Split视图,就是左侧是代码,右侧是设计图,但是我们忽视了最上方的工具栏,这里才是真正的宝藏。下面教大家