粗糙学习SSM框架
1.开发工具,所用技术简述
1.1框架简述
框架:Spring+Spring MVC+MyBatis
1.2开发工具
开发工具:JDK,Tomcat,Intellij IDEA,Spring,Spring MVC,MyBatis,MySQL
2.开发技术路线
2.1 Spring基本知识及应用
2.1.1 Spring基础
1.IOC(Inversion of Control)控制反转:不用自己创建对象,而是使用spring框架提供IOC容器来管理,直接从IOC容器获取对象,控制权由应用程序交给IOC容器。
IOC实现依赖关系对象之间的解耦,通过IOC容器关联对象类。(理解:以前吃饭要自己做,现在吃饭,美团外面直接给你送到)
2.AOP(Aspect Oriented Programming) 面向切面编程
3.DI(Dependency Inject)依赖注入:对象的属性,已经被注入好相关值,直接使用。程序依赖容器创建并注入它所需要的外部资源(理解:外卖店家直接给你送餐)
4.框架核心容器BeanFactory和ApplicationContext,方法有:setter注入和构造方法注入
5.Bean的使用,在applicationContext.xml中将Bean文件和文件对应的class写在一起(理解:创建对象实例)
2.1.2 Spring Bean
1.Bean实例有6种定义域
singleton(单例):始终指向同一对象(默认)
prototype(原型):spring获取prototype定义的的bean时,会创建一个新的bean实例
request:一次http请求,会返回bean的同一个实例,不同请求会产生新的,该bean仅在http request内有效
session:同上,仅在http session内有效
application:为每个servletContext创建一个实例,仅在web相关的applicationContext内有效
websocket:为每个websocket创建一个实例,仅在web相关的applicationContext内有效
2.以prototype作用域举例
<bean id="scope" class="com.ssm.xx.xx.xx" scope="prototype"/>
其中id也可以是name,class就是你实例文件路径,scope就是bean作用域
3.bean的装配方式(bean的依赖注入方式):XML装配,Annotation(注解)装配,自动装配
4.通过Annotation(注解)装配:常规方式,努力掌握,常用注解(@Component,@Repository,@Service,@Controller,@Autowired,@Resource,@Qualifier)
5.@Component,描述Spring中的Bean,可作用在任何层次,只需注解标注在相应类上即可
@Repository,用于数据访问层(DAO层),将业务层类标识为Spring中的Bean
@Service,作用在业务层(Service层)
@Controller,作用在控制层(Controller)
@Autowired,用于Bean的属性变量,属性的setter()方法及构造方法进行标注,配合对应的注解处理器完成Bean的自动装配工作。
@Resource,类似于Autowired,按照Bean的实例名称进行装配
@Qualifier,与@Autowired注解配合使用
6.<context:component-scan base-package="com.ssm.xxx"/>
直接扫描,无需再xml中进行bean的id和class匹配操作
7.个人对于Annotation的理解:利用注解,配置bean就只剩下一步,什么文件利用什么注解,什么时候要@Resource自己看情况
2.1.3 Spring AOP什么意思
1.AOP,面向切面编程,主要是修改代码需要修改所有相关方法,太麻烦,解决方法是将分散在各个方法中重复代码提取出来,再编译时,将这些代码应用到需要执行的地方中。
具体内容省略不写,可以参考他人的理解
2.2 MyBatis相关知识
2.2.1 关于数据库
1.spring jdbc
在applicationContext.xml里面配置数据源,数据库驱动,连接数据库的URL,用户名和密码
所谓的dataSource四大金刚就是指驱动名称,数据源所在地址,用户名,用户密码
2.要操作数据库要导入的包(mysql的包,jdbc的包,spring事务处理的包,spring架构的5个包)
3.先创建实例类–>编写带参数的方法类(Dao)–>接口具体实现方法的类
4.增删改查的方法,添加方法举例:
public int addUser(User user){
String sql="insert into user(username,password) value(?,?)";
Object[] params=new Object[]{
user.getUsername(),
user.getPassword()
};
int num=this.jdbdTemplate.update(sql,obj);
return num;
}
//更新用户的方法
public int updateUser(User user){
String sql="update user det username=?,password=? where id=?";
Object[] params=new Object[]{
user.getUsername(),
user.getPassword(),
user.getId()
};
int num=this.jdbdTemplate.update(sql,params);
return num;
}
//删除用户的方法
public int deleteUser(User user){
String sql="delete from user where id=?";
int num =this.jdbcTemplate.update(sql,id);
return num;
}
5.可以使用Test写增删改查测试文件来操作数据库,要提前将jdbcTemplate注入userDao中
举例:测试增加和查询数据的例子
@Test
public void addUserTest(){
//加载配置
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
//获取userDao实例
UserDao userDao=(UserDao)applicationContext.getBean("userDao");
//创建user实例
User user= new User();
//设置user实例属性值
user.setUsername("zhangsan");
user.setPassword("123");
//添加用户
int num=userDao.addUser(user);
if(num>0){
system.out.println("ok!");
}
else{
System.out.println("false");
}
}
6.userDao中先创建查询单个用户和查询所有用户的方法–>Dao接口中写具体的的查询方法–>测试类写测试查单个–>查所有
//创建方法名
//通过id查找用户
public User findUserById(int id);
//全部查找
public List<User> findAllUser();
//具体的查找方法
//通过id查找用户
public User findUserById(int id){
String sql="select * from user where id=?";
RowMapper<User> rowMapper= new BeanPropertyRowMapper<User>(User.class);
return this.jdbcTemplate.queryForObject(sql,rowMapper,id);
}
//全部查找
public List<User>findAllUser(){
String sql="select * from user";
RowMapper<User> rowMapper= new BeanPropertyRowMapper<User>(User.class);
return this.jdbcTemplate.queryForObject(sql,rowMapper);
}
//测试类根据id查找数据
@Test
public void findUserByIdTest(){
ApplicationContext applicationContext=new ClassPathXmlApplication("applicationContext.xml"):
//通过id查找数据
UserDao userDao=(UserDao)applicationContext。getBean("userDao");
User user =userDao.findUserById(22):
System.out.println(user);
}
//全查用户测试类
@Test
public void findAllUserTest(){
ApplicationContext applicationContext=new ClassPathXmlApplication("applicationContext.xml"):
//通过id查找数据
UserDao userDao=(UserDao)applicationContext。getBean("userDao");
//查询所有用户数据
List<User>list=userDao.findAllUser();
//需换输出所有用户数据信息
for(User user:list){
System.out.println(user);
}
}
2.2.2 Spring 事务处理(主流注解方式开发)
1.编程序事务管理:通过编写代码实现的事务管理,包括定义十五的开始,正常执行后的十五提交和异常时的事物回滚。
2.声明式事务管理:通过AOP技术实现的事务管理,将事务管理作为一个“切面”代码单独编写,通过AOP技术将事务管理的“切面”代码植入业务目标类中。
3.常用声名式事务管理,只要在配置文件进行相关的事物规则声名。(现成的,使用就好)
4.声明式事务管理一种是基于XML,一种是基于Annotation的方式(使用)。
5.基于Annotaition的事物管理方法:在spring容器中注册事务注解驱动–>在需要使用事物的spring Bean或者Bean类方法上添加注解@Transactional
//注册事物注解驱动
<tx:annotation-driven transaction-managers="transactionManager"/>
2.2.3 关于MyBatis的个人认识
1.MyBatis是支持SQL查询,存储和高级映射的持久层框架,XML或注解配置,将接口和Java中的POJO映射成数据库中的记录。(面向对象的操作–>MyBatis–>SQL操作)
2.创建POJO包下创建User持久化类,声名属性和getter/setter方法–>mapper包下面创建映射文件UserMapper.xml文件(操作数据库)–>配置mybatis-config.xml文件(jdbc和mapper位置)–>写test文件
3.通过UserMapper文件书写增删改查操作语句,在test文件中写具体方法
2.2.4 动态SQL(增删改查的个人见解)
1.<if>
:判断语句,用于单条件分支判断
2.<choose>(<when>,<otherwise>):
用于多条件分支判断类似switch-case-default
3.<where><trim><set>
用于SQL拼装,特殊字符等问题
4.<foreach>
循环语句,常用于in语句等列举条件中(用的最多)
//foreach元素的使用,它通常是使用在构建IN条件语句时使用
<select id="findUserByIds" parameterType="List" reaultType="com.ssm.po.User">
select * from t_user where id in
<foreach item="id" index="index" collection="list" open="("separator=","close=")">
#{id}
</foreach>
</select>
5.<bind>
用于模糊查询SQL中