新的管理 bean 的方式
旧的管理 bean 的方式
在 spring.xml 中写入 <bean class="类">,
给类上添加注解 @Component, @Service, @Controller, @Repository, @Mapper, @RestController,配合 bean 扫描找到他们管理新的管理 bean 的方式
@Bean 配合工厂方法,生成对象交给spring容器管理
// 工厂方法, 生产一个希望由 spring 管理的对象 // 方法名相当于 bean 的id,方法返回的对会放入容器,其他地方可以使用@Autowired 对它进行依赖注入 // 此方法只会被调用一次,因为默认情况要保证userService对象是单例的 @Bean // 相当于 <bean id="userService" class="UserService"> public UserService userService() { return new UserService(); }
如果希望把这些bean的定义集中管理,新建一个 配置类
@Configuration public class 配置类 { @Bean public 工厂方法1() {} @Bean public 工厂方法2() {} }
spring boot 集成 jdbc
JdbcTemplate jdbc模板类 (模板模式)
idea 快捷键 ctrl + alt + B 列出某个接口的所有实现类
1) 加入 start-jdbc 依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency>
2) 为 dao 类注入jdbcTemplate属性
@Repository public class Dao类 { @Autowired private JdbcTemplate jdbc; jdbc.update(sql, sql中?值) 执行增、删、改 jdbc.query(sql, rowMapper, sql中?值) 执行查询结果为多行时 jdbc.queryForObject(sql, rowMapper, sql中?值) 执行查询结果为一行时 }
例子如下:
StudentL类
@Data public class Student { private int sid; private String sname; private Date birthday; private String sex; }
对学生表进行增删改
@Repository // 专门加在数据访问层上, 作用: @Service @Controller @Component public class StudentDao { @Autowired private JdbcTemplate jdbc; //表中的列名如果和属性名相同就可以如下写 public void insert(String name, Date birthday, String sex) { String sql = "insert into student(sid, sname, birthday, sex) values(null,?,?,?)"; jdbc.update(sql, name, birthday, sex); } public List<Student> findAll() { String sql = "select * from student"; //Student.class 里面有属性名与数据库表中对应的 return jdbc.query(sql, new BeanPropertyRowMapper<>(Student.class)); } public Student findById(int id) { String sql = "select * from student where sid = ?"; return jdbc.queryForObject(sql, new BeanPropertyRowMapper<>(Student.class), id); } //表中的列名如果和属性名不相同或相同可以如下两种写法 /*public List<Student> findAll() { String sql = "select * from student"; // rowMapper 含义是, 把数据库中的一行记录, 映射为java中的一个对象 return jdbc.query(sql, new RowMapper<Student>() { @Override public Student mapRow(ResultSet rs, int i) throws SQLException { Student stu = new Student(); stu.setSid(rs.getInt("sid")); stu.setSname(rs.getString("sname")); stu.setBirthday(rs.getDate("birthday")); stu.setSex(rs.getString("sex")); return stu; } }); }*/ // 用lambda改进 /*public List<Student> findAll() { String sql = "select * from student"; // rowMapper 含义是, 把数据库中的一行记录, 映射为java中的一个对象 return jdbc.query(sql, (rs, i) -> { Student stu = new Student(); stu.setSid(rs.getInt("sid")); stu.setSname(rs.getString("sname")); stu.setBirthday(rs.getDate("birthday")); stu.setSex(rs.getString("sex")); return stu; }); }*/ }
控制类,只演示 findAll 和 findById
@Controller public class StudentController { //依赖注入,把数据植入 @Autowired private StudentDao studentDao; //自定义路径 @RequestMapping("/findAll") //把 jav a对象转换为 json 字符串 @ResponseBody public List<Student> findAll() { return studentDao.findAll(); } @RequestMapping("/findById") @ResponseBody public Student findById(int id) { return studentDao.findById(id); } }
结果
当浏览器地址输入 http://localhost:8080//findAll 时
当浏览器地址输入 http://localhost:8080//findById?id=1001 时