思路要有:
顺着思路:就是一步一步写代码的事情了 。
顺着思路:就是一步一步写代码的事情了 。
controller
(web应用层 负责和web前端交互接收用户请求,处理一些参数)
service
(业务逻辑层 用来处理所有的业务逻辑)
repository
(持久层 跟数据库交互 用来执行curd的sql语句)
返回一个实体:建立一个实体包
util:工具包
service:
respository:持久层
util:工具包
service:
respository:持久层
@Autowired进行标注,让 spring 完成 bean 自动装配的工作。默认是按照类去匹配(在按照名字)
<context:component-scan>:扫描指定包,如果发现有指定注解,那么该类将由Spring进行管理
包扫描,只要标注了@Controller、@Service、@Repository,@Component 注解的类会自动加入到容器中
包扫描,只要标注了@Controller、@Service、@Repository,@Component 注解的类会自动加入到容器中
<!-- 有些参数在某些阶段中是常量,而这些参数在不同阶段之间又往往需要改变-->
<!-- 期望:能不能有一种解决方案可以方便我们在一个阶段内不需要频繁书写一个参数的值,而在不同阶段间又可以方便的切换参数配置信息-->
<!-- 解决:spring中提供了一种简便的方式就是context:property-placeholder/元素 这里location值为参数配置文件的位置-->
<!-- 期望:能不能有一种解决方案可以方便我们在一个阶段内不需要频繁书写一个参数的值,而在不同阶段间又可以方便的切换参数配置信息-->
<!-- 解决:spring中提供了一种简便的方式就是context:property-placeholder/元素 这里location值为参数配置文件的位置-->
bean-book.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> 6 <!-- <context:component-scan>:扫描指定包,如果发现有指定注解,那么该类将由Spring进行管理--> 7 <!--包扫描,只要标注了@Controller、@Service、@Repository,@Component 注解的类会自动加入到容器中--> 8 <context:component-scan base-package="book"/> 9 <!-- 有些参数在某些阶段中是常量,而这些参数在不同阶段之间又往往需要改变--> 10 <!-- 期望:能不能有一种解决方案可以方便我们在一个阶段内不需要频繁书写一个参数的值,而在不同阶段间又可以方便的切换参数配置信息--> 11 <!-- 解决:spring中提供了一种简便的方式就是context:property-placeholder/元素 这里location值为参数配置文件的位置--> 12 <context:property-placeholder location="db.properties"/> 13 <!-- C3P0(数据源)是一个开放源代码的JDBC连接池,实现了Connection 和Statement 池的DataSources 对象等。--> 14 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> 15 <!--数据库的连接信息--> 16 <property name="driverClass" value="${driver_class}"/> 17 <property name="jdbcUrl" value="${jdbc_url}"/> 18 <property name="user" value="${jdbc_user}"/> 19 <property name="password" value="${jdbc_password}"/> 20 <property name="maxPoolSize" value="${max_size}"/> 21 <property name="minPoolSize" value="${min_size}"/> 22 </bean> 23 <!-- JDBC的一个辅助类(JDBC Template)(原始JDBC的一个简单封装),它封装了JDBC的操作--> 24 <!--封装spring的jdbcTemplate--> 25 <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 26 <!-- 引用上面的dataSource 为属性赋值--> 27 <property name="dataSource" ref="dataSource"/> 28 </bean> 29 </beans>
db.properties
1 driver_class=com.mysql.jdbc.Driver 2 jdbc_url=jdbc:mysql:///stubook?useUnicode=true&characterEncoding=UTF8 3 jdbc_user=root 4 jdbc_password=1234 5 max_size=20 6 min_size=5
BookMenu
1 package book; 2 import book.entity.Stu; 3 import book.service.StudentService; 4 import org.springframework.beans.factory.annotation.Autowired; 5 import org.springframework.context.support.ClassPathXmlApplicationContext; 6 import org.springframework.jdbc.core.JdbcTemplate; 7 8 import java.util.Scanner; 9 10 public class BookMenu { 11 public static void main(String[] args) { 12 ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("bean-book.xml"); 13 //service 业务逻辑层 用来处理所有的业务逻辑 14 //注意起别名 否则报错 No bean named 'studentService' available 15 StudentService studentService= (StudentService) context.getBean("studentService"); 16 Scanner input = new Scanner(System.in); 17 while (true) { 18 System.out.println("请输入学号:"); 19 String loginNum = input.nextLine(); 20 System.out.println("请输入密码:"); 21 String loginPwd = input.nextLine(); 22 //去数据库校验用户名密码 23 //获取jdbcTemplete 24 Stu stu=studentService.login(loginNum,loginPwd); 25 if(stu==null){ 26 System.out.println("登录失败,学号或者密码错误");//增大破解难度 或者 一词 27 } 28 else{ 29 System.out.println("登录成功"); 30 } 31 } 32 } 33 }
StudentService
1 package book.service; 2 import book.entity.Stu; 3 4 public interface StudentService { 5 Stu login(String loginnum, String loginpwd); 6 }
StudentSerciceImpl
1 package book.service.impl; 2 3 import book.entity.Stu; 4 import book.repository.StudentRepository; 5 import book.service.StudentService; 6 import org.springframework.beans.factory.annotation.Autowired; 7 import org.springframework.stereotype.Service; 8 9 @Service("studentService") 10 public class StudentServiceImpl implements StudentService { 11 // @Autowired进行标注,让 spring 完成 bean 自动装配的工作。默认是按照类去匹配(在按照名字) 12 @Autowired 13 private StudentRepository studentRepository; 14 @Override 15 public Stu login(String loginnum, String loginpwd) { 16 Stu stu= studentRepository.login(loginnum,loginpwd); 17 return stu; 18 } 19 }
StudentRepository
1 package book.repository; 2 3 4 import book.entity.Stu; 5 6 public interface StudentRepository { 7 Stu login(String loginnum, String loginpwd); 8 }
StudentRepository
1 package book.repository.impl; 2 3 import book.entity.Stu; 4 import book.repository.StudentRepository; 5 import org.springframework.beans.factory.annotation.Autowired; 6 import org.springframework.dao.DataAccessException; 7 import org.springframework.dao.EmptyResultDataAccessException; 8 import org.springframework.jdbc.core.BeanPropertyRowMapper; 9 import org.springframework.jdbc.core.JdbcTemplate; 10 import org.springframework.stereotype.Repository; 11 12 @Repository 13 public class StudentRepositoryImpl implements StudentRepository { 14 @Autowired 15 private JdbcTemplate jdbcTemplate; 16 //真正访问数据库 17 @Override 18 public Stu login(String loginnum, String loginpwd) { 19 String sql="select id,stu_name,stu_age,stu_num,stu_pwd from stu where stu_num=? and stu_pwd=?"; 20 //映射 查询字段 对应类的属性 21 BeanPropertyRowMapper<Stu> rowMapper=new BeanPropertyRowMapper<>(Stu.class); 22 Stu stu=null; 23 try { 24 stu=jdbcTemplate.queryForObject(sql,rowMapper,loginnum,loginpwd); 25 } catch (EmptyResultDataAccessException e) { 26 e.printStackTrace(); 27 } 28 return stu; 29 } 30 }
Stu
1 package book.entity; 2 3 public class Stu { 4 private int id; 5 private String stuName; 6 private String stuNum; 7 private int stuAge; 8 private String stuPwd; 9 10 public int getId() { 11 return id; 12 } 13 14 public void setId(int id) { 15 this.id = id; 16 } 17 18 public String getStuName() { 19 return stuName; 20 } 21 22 public void setStuName(String stuName) { 23 this.stuName = stuName; 24 } 25 26 public String getStuNum() { 27 return stuNum; 28 } 29 30 public void setStuNum(String stuNum) { 31 this.stuNum = stuNum; 32 } 33 34 public int getStuAge() { 35 return stuAge; 36 } 37 38 public void setStuAge(int stuAge) { 39 this.stuAge = stuAge; 40 } 41 42 public String getStuPwd() { 43 return stuPwd; 44 } 45 46 public void setStuPwd(String stuPwd) { 47 this.stuPwd = stuPwd; 48 } 49 50 @Override 51 public String toString() { 52 return "Stu{" + 53 "id=" + id + 54 ", stuName='" + stuName + '\'' + 55 ", stuNum='" + stuNum + '\'' + 56 ", stuAge=" + stuAge + 57 ", stuPwd='" + stuPwd + '\'' + 58 '}'; 59 } 60 }