乐趣区

关于java:Java开发技术之-SSM框架的学习分享

Spring 框架:

Spring 是一个轻量级 JavaEE 开发框架,以 Ioc 和 AOP 为外围,在 spring 中,认为一切都是资源,而资源是类的实例化对象(Bean),包容并治理这些 Bean 的是 spring 提供的 Ioc 容器,所以 spring 是基于 Bean 的编程

长处:

非侵入式:指的是框架的 API 不会在业务逻辑上呈现,即业务逻辑是污浊的

容器:spring 提供了容器性能,用于治理对象生命周期和对象之间的依赖关系,通过配置文件能够配置对象和依赖关系,到时候能够间接应用

Ioc:管制反转,依赖关系的转移,如果之前依赖于实现,那么当初依赖于形象,核心思想就是面向接口编程

依赖注入:对象之间依赖关系的实现,包含接口注入,结构注入,属性 setter 注入,spring 中反对后两者

AOP:面向切面编程,网上各种讲解都有,笔者感觉大抵就是,在不改变原有代码的状况下,对指标进行性能加强和裁减,即在某点插入某面,点即原有性能代码,面即待裁减性能代码

spring 次要蕴含了 3 大部分:Core container,Data Access/Integeration,Web

Core container:Beans,Core,Context,Spring EL

Data Access/Integeration:JDBC 等

WEB:web,servlet,websocket

其余:AOP,Test 等

Ioc/DI:

Spring 的外围机制 Ioc 容器,用来削减组件之间的耦合度,在 java 中,调用者和被调用者存在依赖关系,通过 new 关键字实例化对象会导致两者耦合减少,不利于我的项目保护,在 Spring 框架中,创立和治理对象的工作不再由调用者执行,java 培训而是交给框架施行,这样,管制权限由代码程序转移给了 spring 框架,控制权产生了反转

spring 提倡面向接口编程,DI 的外围就是:明确定义组件接口,独立开发各个组件,而后依据组件的依赖关系进行组装运行

注入类型:

构造方法注入:

条件:须要带参构造方法

// 配置文件

<bean >

<constructor-arg name=”name” value=” 小白 ”/>

<constructor-arg name=”age” value=”2″/>

</bean>

// 性能代码

private static Cat cat;

public static void main(String[] args) {

ApplicationContext context=new ClassPathXmlApplicationContext(“application.xml”);

cat=context.getBean(“cat”,Cat.class);

System.out.println(cat.toString());

}

// 输入

Cat{name=’ 小白 ’, age=2}

setter 办法注入:

条件:须要指标有 set 办法和无参结构

<bean >

<property name=”name” value=” 小红 ”/>

<property name=”age” value=”3″/>

</bean>

操作后果同上

p 命名空间:

须要在文件头减少条目:

xmlns:p=”http://www.springframework.org/schema/p”

// 配置 Bean

<bean p:name=” 小黑 ” p:age=”4″/>

操作后果同上

Bean 拆卸:

spring 反对 xml 和 properties 两种形式的配置文件,罕用 xml 进行 bean 的创立和依赖治理,properties 寄存动态属性;

xml 配置文件的根标签就是 beans,其内蕴含若干 bean 标签,用来定义一个 bean 并形容依赖关系和如何拆卸

bean 蕴含以下属性(在 bean 标签内):

id:bean 的惟一标识,拆卸时依据 id 获取对象

name:容器同样能够通过 name 实现对象配置和治理,能够指定多个,用逗号分隔

calss:具体实现类,全门路

scope:作用域,5 种

bean 子元素标签:

<constructor-arg>: 结构注入实例化 bean,上游 index(属性序号),type(参数类型),ref/value(指定参数值)

<property>: 调用 bean 中 setter 办法进行注入,实现属性赋值,name 指定属性名,value/ref 指定值

ref: 注入援用其余 bean

value:指定一个常量值

list,map,set,entry: 指定 bean 的属性类型为对应类型的属性值

Bean 作用域:

singleton:单例,仅定义一个 bean 对象

property:定义多个对象实例

request:一次 Http 申请,容器返回一个实例,仅作用于基于 web 的 spring application context 情景下无效

session:一次会话返回同一个 bean 实例,效劳同上

global session:在一个全局 Http session 会话中,返回同一个实例,仅实用 protlet context 无效

拆卸形式:

基于 xml 拆卸:

参照注入局部,这里笔者有些凌乱,感觉基于 xml 的注入和拆卸时一个操作两个概念

基于注解拆卸

@Service

class Test1 {

}

@Component

class Test2 {

}

@Controller

class Test3 {

}

@Qualifier()

@Controller

public class testOut {

@Value(“#{spring.name}”)

private String name;

@Value(“#{Cat.id}”)

private String id;

@Resource

private Test1 test1;

@Autowired

private Cat cat1;

private static Cat cat;

@RequestMapping(value = “/index.html”,method = RequestMethod.POST)

public static void main(String[] args) {

ApplicationContext context = new ClassPathXmlApplicationContext(“application.xml”);

cat = context.getBean(“cat”, Cat.class);

System.out.println(cat.toString());

}

}

spring 中应用了一系列注解进行 bean 的拆卸,上面介绍一些常见的注解:

@Component

泛化概念,作用域任何档次,仅仅标识一个组件(bean),写在类上即可

@Repository

用于将数据拜访层(DAO)的类标识为 spring 中的 bean,作用同上

@Service

通常作用于业务层,性能同上,将业务层类示意为 bean

@Controller

通常作用于管制层(如 spring mvc 的 controller),将管制层类标识为 bean,作用同上

@Autowired

用于对 bean 的属性变量,属性的 setter 办法及构造方法进行标注配合相应的注解处理器实现 bean 的主动拆卸,默认依照 bean 类型拆卸,加上 @Qualifier 注解,能够间接指定一个 bean 实例名称进行拆卸

@Resource

作用相当于 @Autowired,区别在于这里依照 bean 实例名称拆卸,蕴含 name 和 type 能够都不指定,这两个影响拆卸进行

@Qualifier(这一对注解临时不太会应用,仅做理解)

与 @Autowired 配合,默认依照类型拆卸,bean 实例名称有该注解参数指定

@RequestMapping

为控制器指定能够解决哪些申请能够用在类或办法上,并且在办法上时能够定义反对哪些申请形式

以上作用相似 xml 拆卸,成果差不多

@Value

当某些定义值在配置文件加载后能够通过该标签获取,有两种形式

@Value(“${ 配置文件中的属性字段}”)

@Value(“#{obj.property}”)

@Value(“#{spring.name}”)//properties 配置文件中额属性字段

@Value(“#{Cat.name}”)//bean Cat 的 name 属性

<bean name=”cat1,cat2″ scope=”prototype” autowire=”byName”>

主动拆卸:

在上述代码中,通过 autowire=”byName” 定义了该 bean 的拆卸形式为依照名称主动拆卸

Spring MVC

该框架中,Controller 代替了 Servlet 负担控制器的性能,Controller 接管申请,调用相应的组件进行申请解决,解决实现后返回后果,Controller 调用相应的 View 并对后果进行视图渲染,最终相应传送到客户端

该框架暂不做较多介绍,笔者目前仅处于会用阶段,等后续把握后再做探讨

Mybatis

反对一般 SQL 查问,存储过程和高级映射的长久层框架,封装了简直所有的 JDBC 代码和参数的手工设置以及后果集查问检索等,应用简略的 xml 或注解做配置和定义映射关系

须要配置:数据库属性(账户名,明码,url 等),接口映射文件等

数据库动态属性文件:

database.properties: 前 4 行为必须的, 该文件通过第一个配置文件 application 进行加载

<context:property-placeholder location=”classpath*:config/dev/database.properties”

ignore-unresolvable=”false” ignore-resource-not-found=”true”/>

dataSource.driverClassName=com.mysql.cj.jdbc.Driver

dataSource.url=jdbc:mysql://localhost:3306/sharetec?serverTimezone=Asia/Shanghai

dataSource.username=root

dataSource.password=admin001

dataSource.initialSize=10

dataSource.minIdle=10

dataSource.maxActive=200

database.xml:配置了数据库连贯属性

<bean init-method=”init”

destroy-method=”close”>

<property name=”driverClassName” value=”${dataSource.driverClassName}”/>

<property name=”url” value=”${dataSource.url}”/>

<property name=”username” value=”${dataSource.username}”/>

<property name=”password” value=”${dataSource.password}”/>

</bean>

<bean >

<property name=”dataSource” ref=”dataSource”/>

<property name=”configLocation” value=”classpath:mybatis/config/mybatisConfig.xml”/>

</bean>

spring-mapper.xml 配置了 mapper 接口 bean 对象,并引入数据库配置文件

<!– 映射 mspper 接口 –>

<bean >

<property name=”mapperInterface” value=”com.shareTec.mapper.UserInfoMapper”/>

<property name=”sqlSessionFactory” ref=”sqlSessionFactory”/>

</bean>

<!– 映射 mybatis 的 sql 配置文件 –>

<import resource=”spring-database.xml”/>

mybatisConfig.xml 配置用到的 bean 对象别名和设置 sql 的配置文件门路

<configuration>

<!– 配置 bean 别名和 mapper–>

<typeAliases>

<typeAlias alias=”userInfo” type=”com.shareTec.bean.UserInfo”/>

<package name=”com.shareTec.bean”/>

</typeAliases>

<mappers>

<mapper resource=”mybatis/UserInfoMapper.xml”/>

</mappers>

</configuration>

ObjectMapper.xml 在该文件书写 sql 代码

<insert parameterType=”userInfo”>

insert into userinfos

(userId,username,password,cardId,state)

values

(#{userId},#{username},#{password},#{cardId},#{state})

</insert>

通过以上配置文件能够实现 java 代码和数据库的互操作

SQL 进阶

sql 一般的增删改查语句

insert into userinfo (列) values (值);

delete from 表名 where 字段条件

drop table 表名 truncate table 表名

update 表名 set(字段 = 值)where(条件)

select(字段)from 表名 where 条件

在理论中可能场景比较复杂,这是后应用动静 SQL 技术会比拟适宜(前提是纯熟应用,笔者目前不算特地纯熟,只能大略应用)

insert 个别不应用(或者笔者接触面比拟窄,能想到几种场景,然而感觉没必要,能够间接在数据库设置字段属性也能达到相应目标)

我的项目中个别不对数据库进行删除操作,通常应用状态字段标识数据有效性(比方 00,01 等)

改,又叫更新:

<update parameterType=”userinfo”>

update userinfos

<set>

<if test=”username!=null”>

username=#{username},

</if>

</set>

<choose>

<when test=”userId!=null”>

userId=#{userId}

</when>

<otherwise>

cardId=#{cardId}

</otherwise>

</choose>

</update>

上述代码实现了字段判断和条件抉择更新,用到了 <choose>,<if>,<when>,<otherwise> 标签

<select resultType=”userinfo”>

select * from userinfos where userId in

<foreach collection=”list” item=”users” open=”(” close=”)” separator=”,”>

{users}

</foreach>

</select>

上述代码实现了遍历汇合查问,应用了 <foreach> 标签进行汇合设置,主要参数:

collection:汇合性质,能够是 list 或者 array

item:每个汇合元素迭代时的别名,如果元素是值,则该属性可代替本字段,如果是援用对象,则能够代替以后迭代对象,能够应用相似 users.getName 这种语法获取属性,open 和 close 代表以什么结尾和结尾,separator,示意以什么做分隔符

退出移动版