首页
统计
4K壁纸
留言
Search
1
自动采集头像+壁纸+流量主小程序
935 阅读
2
【腾讯云】低价服务器活动和新用户活动
507 阅读
3
Spring MVC 结构体系
426 阅读
4
Spring Di依赖注入环境
384 阅读
5
springboot
341 阅读
技术分享
学习笔记
jsp
Maven
Mybatis
Spring
Hibernate
系统源码
网站源码
APP源码
微信程序
小程序
登录
/
注册
Search
标签搜索
学习笔记
Hibernate
小程序
Mybatis
源码
教程
笔记
Ajax
微信
活动
福利
MyEclipse 10
笔记fen'x
壁纸小程序
微信程序
HQL
笔记分享
Mybatis-Plus
小新
累计撰写
44
篇文章
累计收到
48
条评论
首页
栏目
技术分享
学习笔记
jsp
Maven
Mybatis
Spring
Hibernate
系统源码
网站源码
APP源码
微信程序
小程序
页面
统计
4K壁纸
留言
搜索到
7
篇与
Spring
的结果
2022-02-15
SSM框架整合
SSM框架搭建1. 新建Web Project ,导入相关jar文件{cloud title="ssmjar包" type="lz" url="https://ksxx.lanzouo.com/iQU4j006dbfg" password=""/}切面类(com.xyh.aspect)类名:ServiceAsperct.java {collapse}{collapse-item label="代码展示"}package com.xyh.aspect; import org.apache.log4j.Logger; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component; import java.util.Arrays; @Component //注入ioc容器 @Aspect //声明当前类为切面类 public class ServiceAspect { Logger logger = Logger.getLogger(ServiceAspect.class); @Pointcut("execution(* com.xyh.service..*.*(..))") public void pc(){} @Around("pc()") public Object around(ProceedingJoinPoint jp){ Object obj = null; try { logger.info("前置增强:进入了"+jp.getTarget()+"对象的"+jp.getSignature().getName()+"()方法,传递的参数是:"+ Arrays.toString(jp.getArgs())); obj = jp.proceed(); logger.info("后置增强:进入了"+jp.getTarget()+"对象的"+jp.getSignature().getName()+"()方法,返回的参数是:"+obj); } catch (Throwable e) { logger.info("异常抛出增强:进入了"+jp.getTarget()+"对象的"+jp.getSignature().getName()+"()方法,发生的异常是"+e.getMessage()); }finally { logger.info("最终增强:进入了"+jp.getTarget()+"对象的"+jp.getSignature().getName()+"()方法,主要用于是释放资源"); } return obj; } } {/collapse-item}{/collapse}实体类(com.xyh.pojo)类名:User.java {collapse}{collapse-item label="User代码"}package com.xyh.pojo; import java.util.Date; import java.util.List; public class User { private List<Address> AddressList; public List<Address> getAddressList() { return AddressList; } public void setAddressList(List<Address> addressList) { AddressList = addressList; } private Role role; public Role getRole() { return role; } public void setRole(Role role) { this.role = role; } private int id; private String userRoleName; private String userCode; private String userName; private String userPassword; private int gender; private Date birthday; private String phone; private String address; private int userRole; private String createdBy; private String creationDate; private String modifyBy; private String modifyDate; public String getUserRoleName() { return userRoleName; } public void setUserRoleName(String userRoleName) { this.userRoleName = userRoleName; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUserCode() { return userCode; } public void setUserCode(String userCode) { this.userCode = userCode; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserPassword() { return userPassword; } public void setUserPassword(String userPassword) { this.userPassword = userPassword; } public int getGender() { return gender; } public void setGender(int gender) { this.gender = gender; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public int getUserRole() { return userRole; } public void setUserRole(int userRole) { this.userRole = userRole; } public String getCreatedBy() { return createdBy; } public void setCreatedBy(String createdBy) { this.createdBy = createdBy; } public String getCreationDate() { return creationDate; } public void setCreationDate(String creationDate) { this.creationDate = creationDate; } public String getModifyBy() { return modifyBy; } public void setModifyBy(String modifyBy) { this.modifyBy = modifyBy; } public String getModifyDate() { return modifyDate; } public void setModifyDate(String modifyDate) { this.modifyDate = modifyDate; } public User() { super(); } @Override public String toString() { return "User [AddressList=" + AddressList + ", role=" + role + ", id=" + id + ", userRoleName=" + userRoleName + ", userCode=" + userCode + ", userName=" + userName + ", userPassword=" + userPassword + ", gender=" + gender + ", birthday=" + birthday + ", phone=" + phone + ", address=" + address + ", userRole=" + userRole + ", createdBy=" + createdBy + ", creationDate=" + creationDate + ", modifyBy=" + modifyBy + ", modifyDate=" + modifyDate + "]"; } } {/collapse-item}{/collapse}converter(com.xyh.converter)类名:StringToDateConverter.java {collapse}{collapse-item label="代码展示"}package com.xyh.converter; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import org.springframework.core.convert.converter.Converter; public class StringToDateConverter implements Converter<String, Date>{ private static SimpleDateFormat[] sdfs= { new SimpleDateFormat("yyyy-MM-dd"), new SimpleDateFormat("yyyy.MM.dd"), new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"), new SimpleDateFormat("yyyy/MM/dd"), new SimpleDateFormat("yyyy年MM月dd日"), new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"), }; @Override public Date convert(String arg0) { Date dt = null; for (int i = 0; i < sdfs.length; i++) { try { dt = sdfs[i].parse(arg0); break; } catch (ParseException e) { } } return dt; } } {/collapse-item}{/collapse}mapper(com.xyh.mapper)接口:UserMapper.java {collapse}{collapse-item label="UserMapper接口"}package com.xyh.mapper; import java.util.List; import com.xyh.pojo.User; public interface UserMapper { /** * 查询所有的用户数据 * @return */ public List<User> UserList(); } {/collapse-item}{/collapse}UserMapper.xml {collapse}{collapse-item label="UserMapper.xml"}<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- namespace:对应dao接口的全类名 --> <mapper namespace="com.xyh.mapper.UserMapper"> <!-- sql的id在当前文件中唯一 相当于接口的方法名 --> <select id="UserList" resultType="user"> select * from smbms_user </select> </mapper>{/collapse-item}{/collapse}service(com.xyh.service){collapse}{collapse-item label="UserService.java"} package com.xyh.service; import java.util.List; import com.xyh.pojo.User; public interface UserService { /** * 查询所有的用户数据 * @return */ public List<User> UserList(); } {/collapse-item}{/collapse}(com.xyh.service.impl){collapse}{collapse-item label="UserServiceimpl"}package com.xyh.serviceImpl; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import com.xyh.mapper.UserMapper; import com.xyh.pojo.User; import com.xyh.service.UserService; @Service public class UserServiceImpl implements UserService{ @Autowired private UserMapper userMapper; @Override @Transactional(propagation=Propagation.SUPPORTS,readOnly=true) public List<User> UserList() { return userMapper.UserList(); } } {/collapse-item}{/collapse}controller(com.xyh.controller)类名:Usercontroller.javapackage com.xyh.controller; import java.util.HashMap; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import com.alibaba.fastjson.JSON; import com.xyh.pojo.User; import com.xyh.service.UserService; @Controller public class UserController { @Autowired private UserService userService; @RequestMapping("selUserlist") @ResponseBody public Object selUserList(){ return userService.UserList(); } @RequestMapping(value="/userCodeYz"/*,method=RequestMethod.GET,produces={"application/json;charset=UTF-8"}*/) @ResponseBody public Object userCodeYz(@RequestParam String userCode,User user){ HashMap<String,Object> map = new HashMap<String, Object>(); if("admin".equals(userCode)){ map.put("msg", "用户名已存在!"); }else { map.put("msg", "用户名可用"); } map.put("user", user); return map; } } 2. 配置web.xml<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <display-name></display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!-- 处理post请求参数乱码的过滤器 --> <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- springmvc的核心控制器 --> <servlet> <servlet-name>DispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>DispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- spring和springmvc整合步骤:1.设置spring上下文参数 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:ApplicationContext*.xml</param-value> </context-param> <!-- 2.监听上下文参数中的contextConfigLocation(spring配置文件路径) --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> </web-app> 3. 配置文件(resources)创建resources资源文件夹创建Mybatis-config.xml文件<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 配置mybatis的全局属性 --> <settings> <!-- 设置自动映射级别为最高层级别 --> <setting name="autoMappingBehavior" value="FULL"/> <setting name="logImpl" value="LOG4J"/> </settings> <!-- 配置pojo全类名别名 --> <typeAliases> <!-- 指定实体类的包,其包下所有类名则均成为类型别名 --> <package name="com.xyh.pojo"/> </typeAliases> <!-- 配置mapper映射文件所在位置 --> <!-- <mappers> <mapper resource="com/xyh/mapper/UserMapper.xml"/> </mappers> --> </configuration>创建applicationContext.xml文件<?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"> <!-- 开启ioc注解 --> <context:component-scan base-package="com.xyh.mapper,com.xyh.service,com.xyh.serviceImpl"></context:component-scan> <!-- 配置JNDI数据源 --> <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="java:comp/env/jdbc/smbms"></property> </bean> <!-- 配置sqlsessionfactoryBean --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <property name="configLocation" value="classpath:Mybatis-config.xml"></property> <property name="mapperLocations"> <list> <value>classpath:com/xyh/mapper/*.xml</value> </list> </property> </bean> <!-- 配置dao(mapper)接口扫描,自动为其下所有接口生成mapperfactorybean实例,实例名为首字母小写的接口名 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.xyh.mapper"></property> </bean> <!-- 声明事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 添加事务注解驱动 --> <tx:annotation-driven/> </beans>创建springmvc.xml文件<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd"> <!-- ioc注解扫描包 --> <context:component-scan base-package="com.xyh.controller"></context:component-scan> <!-- 配置格式转换器 --> <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"> <property name="converters"> <set> <bean class="com.xyh.converter.StringToDateConverter"></bean> </set> </property> </bean> <!-- mvc相关注释驱动 --> <mvc:annotation-driven conversion-service="conversionService"> <mvc:message-converters> <!-- 处理当使用json字符串返回值时,json格式中乱码问题 --> <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"> <property name="supportedMediaTypes" value="application/json;charset=utf-8"></property> <property name="features"> <list> <value>WriteDateUseDateFormat</value> </list> </property> </bean> </mvc:message-converters> </mvc:annotation-driven> <!-- 视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="WEB-INF/jsp"></property> <property name="suffix" value=".jsp"></property> </bean> <!-- 配置静态资源解析器 --> <mvc:resources location="/statics/" mapping="/statics/**"/> </beans>index.jsp页面代码<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <script type="text/javascript" src="statics/js/jquery-1.8.2.min.js"></script> <script type="text/javascript"> $(function(){ $.getJSON("selUserlist","",function(userlist){ var str = ""; $(userlist).each(function(i,o){ str+="<tr>"; str+="<td>"+o.userCode+"</td>"; str+="<td>"+o.userName+"</td>"; str+="<td>"+o.birthday+"</td>"; str+="</tr>"; }) $("tbody").html(str); }) }) </script> </head> <body> <table border="1"> <thead> <tr> <th>用户编号</th> <th>用户姓名</th> <th>用户生日</th> </tr> </thead> <tbody></tbody> </table> </body> </html>
2022年02月15日
194 阅读
1 评论
0 点赞
2022-01-07
spring 结合 Mybatis
Spring和MyBatis的整合步骤1. 建立Web工程,加入Spring和MyBatis的有关jar包 {collapse} {collapse-item label="IDEA导包代码"} <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.2</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.12</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.1.9.RELEASE</version> </dependency> <dependency> <groupId>aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.5.3</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>2.0.6</version> </dependency> </dependencies>{/collapse-item} {/collapse}2. 建立开发目录结构,创建实体类 {collapse} {collapse-item label="User"}package com.xyh.pojo; import java.util.Date; import java.util.List; public class User { private List<Address> AddressList; public List<Address> getAddressList() { return AddressList; } public void setAddressList(List<Address> addressList) { AddressList = addressList; } private Role role; public Role getRole() { return role; } public void setRole(Role role) { this.role = role; } private int id; private String userRoleName; private String userCode; private String userName; private String userPassword; private int gender; private Date birthday; private String phone; private String address; private int userRole; private String createdBy; private String creationDate; private String modifyBy; private String modifyDate; public String getUserRoleName() { return userRoleName; } public void setUserRoleName(String userRoleName) { this.userRoleName = userRoleName; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUserCode() { return userCode; } public void setUserCode(String userCode) { this.userCode = userCode; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserPassword() { return userPassword; } public void setUserPassword(String userPassword) { this.userPassword = userPassword; } public int getGender() { return gender; } public void setGender(int gender) { this.gender = gender; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public int getUserRole() { return userRole; } public void setUserRole(int userRole) { this.userRole = userRole; } public String getCreatedBy() { return createdBy; } public void setCreatedBy(String createdBy) { this.createdBy = createdBy; } public String getCreationDate() { return creationDate; } public void setCreationDate(String creationDate) { this.creationDate = creationDate; } public String getModifyBy() { return modifyBy; } public void setModifyBy(String modifyBy) { this.modifyBy = modifyBy; } public String getModifyDate() { return modifyDate; } public void setModifyDate(String modifyDate) { this.modifyDate = modifyDate; } public User() { super(); } @Override public String toString() { return "User [AddressList=" + AddressList + ", role=" + role + ", id=" + id + ", userRoleName=" + userRoleName + ", userCode=" + userCode + ", userName=" + userName + ", userPassword=" + userPassword + ", gender=" + gender + ", birthday=" + birthday + ", phone=" + phone + ", address=" + address + ", userRole=" + userRole + ", createdBy=" + createdBy + ", creationDate=" + creationDate + ", modifyBy=" + modifyBy + ", modifyDate=" + modifyDate + "]"; } } {/collapse-item} {/collapse}3. 创建数据访问接口 {collapse} {collapse-item label="UserMapper.java"} package com.yxh.dao; import java.util.List; import com.xyh.pojo.User; public interface UserMapper { List<User> selUserlist(); }{/collapse-item} {/collapse}4. 创建数据访问接口的实现类 {collapse}{collapse-item label="UserMapperImpl实现类" }package com.yxh.dao; import java.util.List; import org.mybatis.spring.SqlSessionTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import com.xyh.pojo.User; @Repository public class UserMapperImpl implements UserMapper{ @Autowired private SqlSessionTemplate sqlSession; @Override public List<User> selUserlist() { return sqlSession.getMapper(UserMapper.class).selUserlist(); } }{/collapse-item}{/collapse}5. 配置SQL映射语句文件 {collapse}{collapse-item label="UserMapper.xml" }<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.yxh.dao.UserMapper"> <select id="selUserlist" resultType="com.xyh.pojo.User"> select * from smbms_user </select> </mapper>{/collapse-item}{/collapse}6. 配置MyBatis应用配置文件 {collapse}{collapse-item label="Mabatis-config.xml"}<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 配置mybatis的全局属性 --> <settings> <!-- 设置自动映射级别为最高层级别 --> <setting name="autoMappingBehavior" value="FULL"/> <setting name="logImpl" value="LOG4J"/> </settings> <!-- 配置pojo全类名别名 --> <typeAliases> <!-- 指定实体类的包,其包下所有类名则均成为类型别名 --> <package name="com.xyh.pojo"/> </typeAliases> <!-- 配置mapper映射文件所在位置 --> <mappers> <mapper resource="com/yxh/dao/UserMapper.xml"/> </mappers> </configuration> {/collapse-item}{/collapse}7. 配置Spring应用配置文件 注意:spring可以配置mybatis配置文件{collapse}{collapse-item label="ApplicationContext.xml"}<?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"> <!-- 开启注解 --> <context:component-scan base-package="com.yxh.dao"></context:component-scan> <!-- 获取properties文件中的属性 --> <context:property-placeholder location="mysqlConn.properties"/> <!-- 配置数据源 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="${driver}"></property> <property name="url" value="${url}"></property> <property name="username" value="${uname}"></property> <property name="password" value="${password}"></property> </bean> <!-- 配置sqlsessionfactoryBean --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <property name="configLocation" value="Mybatis-config.xml"></property> </bean> <!-- 配置sqlsession --> <!-- <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg> </bean> --> <!-- 配置自动生成mapper实现类 --> <!-- <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"> <property name="mapperInterface" value="com.yxh.dao.UserMapper"></property> <property name="sqlSessionFactory" ref="sqlSessionFactory"></property> </bean> --> <!-- 配置dao接口扫描,自动为其包下所有生成mapperfactorybean实例,实例名为首字母小写的接口名 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.yxh.dao"></property> </bean> </beans>{/collapse-item}{/collapse}8. 测试类 {collapse}{collapse-item label="MyTest.java"} import java.util.List; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.xyh.pojo.User; import com.yxh.dao.UserMapper; public class MyTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml"); UserMapper usermapper = (UserMapper) context.getBean("userMapper"); List<User> selUserlist = usermapper.selUserlist(); for (User user : selUserlist) { System.out.println(user); } } } {/collapse-item}{/collapse}采用数据库映射器(MapperFactoryBean)的方式完成对数据库操作感觉Mapper接口获取Mapper对象,它封装了原有的SqlSession.getMapper()功能的实现<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"> <!--指定映射器,只能是接口类型--> <property name="mapperInterface" value="com.yxh.dao.UserMapper"></property> <!--注入SqlSessionFactory以提供SqlSessionTemplate实例--> <property name="sqlSessionFactory" ref="sqlSessionFactory"></property> </bean>MapperScannerConfiguser自动扫描指定包下的Mapper接口,并将它们直接注册为MapperFactoryBean<!-- 配置dao接口扫描,自动为其包下所有生成mapperfactorybean实例,实例名为首字母小写的接口名 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.yxh.dao"></property> </bean>
2022年01月07日
263 阅读
0 评论
0 点赞
2022-01-06
spring IOC 和 AOP 扩展
本章目标理解构造注入理解不同数据类型的注入方法掌握p命名空间注入理解更多增强类型的使用方法掌握使用注解实现Ioc的方法掌握使用注解实现AOP的方法构造注入 编写带参构造方法后,java虚拟机不再提供默认的无参构造方法,为了保证使用的灵活性,建议自行添加一个无参构造方法Dao包public class UserDao { public void add(){ System.out.println("正在调用UserDao的add方法"); } } serivce 类package com.xyh.serivce; import com.xyh.dao.UserDao; public class UserSerivce { private UserDao userDao; private String msg; public UserSerivce() { } public UserSerivce(UserDao userDao, String msg) { this.userDao = userDao; this.msg = msg; } public void add(){ userDao.add(); System.out.println(msg); } }ApplicationContext.xml<?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd"> <bean id="userDao" class="com.xyh.dao.UserDao"></bean> <bean id="userSerivce" class="com.xyh.serivce.UserSerivce"> <constructor-arg name="msg" value="调用msg的方法"></constructor-arg> <constructor-arg name="userDao" ref="userDao"></constructor-arg> </bean> </beans>{message type="success" content="设值注入"/}通过setter访问器实现灵活性好 ,但setter方法数量较多时效性差通过无参构造实例化{message type="success" content="构造注入"/}通过构造方法实现灵活性差,仅靠重载限制太多时效性好通过匹配的构造方法实例化,但建议保留无参构造{message type="warning" content="使用p命名空间注入属性值"/}p命名空间的特点:使用属性而不是子元素的形式配置Bean的属性,从而简化了配置代码使用前要先在Spring配置文件中引入p命名空间xmlns:p="http://www.springframework.org/schema/p"使用p命名空间注入属性值<!--p命令--> <bean id="userSerivce" class="com.xyh.serivce.UserSerivce" p:msg="你好!" p:userDao-ref="userDao"></bean>异常抛出增强异常抛出增强的特点 在目标方法抛出异常时织入增强处理可拔插的异常处理方案<aop:after-throwing>元素:定义异常抛出增强package com.xyh.aspect; import org.apache.log4j.Logger; import org.aspectj.lang.JoinPoint; import java.util.Arrays; public class SerivceAspect { Logger logger = Logger.getLogger(SerivceAspect.class); public void before(JoinPoint jp){ System.out.println("前置增强:进入了"+jp.getTarget()+"对象的"+jp.getSignature().getName()+"()方法,传递的参数是:"+ Arrays.toString(jp.getArgs())); } public void afterReturning(JoinPoint jp,Object res){ System.out.println("后置增强:进入了"+jp.getTarget()+"对象的"+jp.getSignature().getName()+"()方法,返回的参数是:"+res); } public void afterThrowing(JoinPoint jp,Exception ex){ System.out.println("异常抛出增强:进入了"+jp.getTarget()+"对象的"+jp.getSignature().getName()+"()方法,发生的异常是"+ex.getMessage()); } } xml配置 <bean id="serivceAspect" class="com.xyh.aspect.SerivceAspect"></bean> <aop:config> <aop:pointcut id="pc" expression="execution(* com.xyh.serivce..*.*(..))"/> <aop:aspect ref="serivceAspect"> <aop:before method="before" pointcut-ref="pc"/> <aop:after-returning method="afterReturning" pointcut-ref="pc" returning="res"/> <aop:after-throwing method="afterThrowing" pointcut-ref="pc" throwing="ex"/> </aop:aspect> </aop:config>最终增强最终增强的特点:无论方法是否抛出异常,都会在目标方法最后织入增强处理 即:该增强都会的到执行类似于异常处理机制中的finally块的作用,一般用于释放资源,可以为各功能模块提供统一的,可拔插的处理方案<aop:after> 元素:定义最终增强public void after(JoinPoint jp){ System.out.println("最终增强:进入了"+jp.getTarget()+"对象的"+jp.getSignature().getName()+"()方法,主要用于是释放资源"); }<aop:after method="after" pointcut-ref="pc"/>环绕增强 (强大 :结合前面的增强)特点:目标方法前后都可织入增强处理功能最强大的增强处理可获取或修改目标方法的参数,返回值,可对它进行异常处理,甚至可以决定目标方法是否执行<aop:around>元素:定义环绕增强Logger logger = Logger.getLogger(SerivceAspect.class); public Object around(ProceedingJoinPoint jp){ Object obj = null; try { logger.info("前置增强:进入了"+jp.getTarget()+"对象的"+jp.getSignature().getName()+"()方法,传递的参数是:"+ Arrays.toString(jp.getArgs())); obj = jp.proceed(); logger.info("后置增强:进入了"+jp.getTarget()+"对象的"+jp.getSignature().getName()+"()方法,返回的参数是:"+obj); } catch (Throwable e) { logger.info("异常抛出增强:进入了"+jp.getTarget()+"对象的"+jp.getSignature().getName()+"()方法,发生的异常是"+e.getMessage()); }finally { logger.info("最终增强:进入了"+jp.getTarget()+"对象的"+jp.getSignature().getName()+"()方法,主要用于是释放资源"); } return obj; }<aop:config> <aop:pointcut id="pc" expression="execution(* com.xyh.serivce..*.*(..))"/> <aop:aspect ref="serivceAspect"> <aop:around method="around" pointcut-ref="pc"/> </aop:aspect> </aop:config> 运行截图<aop:aspectj-autoproxy> 启动@AspectJ注解驱动的切面
2022年01月06日
97 阅读
0 评论
1 点赞
2022-01-06
spring 使用javaConfig实现配置
完全不使用Spring的xml配置了,全权交给Java来做!JavaConfig 是Spring的一个子项目,在Spring 4之后,它成为了一个核心功能!实体类package com.xyh.pojo; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component //这里表示这个类被spring接管了,注册到了容器中 public class User { private String name; public String getName() { return name; } @Value("小新博客") //属性值注入 public void setName(String name) { this.name = name; } @Override public String toString() { return "User{" + "name='" + name + '\'' + '}'; } }配置文件(配置类)package com.xyh.config; import com.xyh.pojo.User; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration //这是一个配置 ,比如之前的 ApplicationContext.xml public class MyConfig { @Bean public User getuser(){ return new User(); } } 测试类import com.xyh.config.MyConfig; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class Mytest { public static void main(String[] args) { ApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class); System.out.println(context.getBean("getuser")); } }
2022年01月06日
249 阅读
0 评论
0 点赞
Spring Di依赖注入环境
构造器注入前面已经了解了set 方式注入搭建环境1.复杂类型package com.xyh.pojo; public class Address { private String address; public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "Address{" + "address='" + address + '\'' + '}'; } } 2.测试对象类package com.xyh.pojo; import java.util.*; public class Student { private String name; private Address address; private String[]books; private List<String> hobbys; private Map<String,String> card; private Set<String> games; private String wife; private Properties info; }3.ApplicationContext.xml {collapse}{collapse-item label="ApplicationContext 配置代码" open}<?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd"> <bean id="address" class="com.xyh.pojo.Address"> <property name="address" value="重庆市沙坪坝重庆师范大学"/> </bean> <bean id="student" class="com.xyh.pojo.Student"> <!--第一种,普通注入 : value--> <property name="name" value="小新"/> <!--bean注入 (类注入)--> <property name="address" ref="address"/> <!--数组注入--> <property name="books"> <array> <value>西游记</value> <value>斗破苍穹</value> <value>三国演义</value> <value>水浒传</value> </array> </property> <!--List注入方式--> <property name="hobbys"> <list> <value>敲代码</value> <value>玩游戏</value> <value>看动漫</value> </list> </property> <!--Map注入方式--> <property name="card"> <map> <entry key="身份证" value="8562154788795421565"></entry> <entry key="银行卡" value="2123123135321511321"></entry> </map> </property> <!--Set注入方式--> <property name="games"> <set> <value>LOL</value> <value>COC</value> <value>BOB</value> </set> </property> <!--null注入--> <property name="wife"> <null/> </property> <!--Properties注入方式--> <property name="info"> <props> <prop key="url">www.yy0228.cn</prop> <prop key="driver">JDBC</prop> <prop key="username">root</prop> <prop key="password">root</prop> </props> </property> </bean> </beans>{/collapse-item}{/collapse}4.测试类public class MyTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml"); Student student = (Student) context.getBean("student"); System.out.println(student); } } 截图展示
2022年01月05日
384 阅读
0 评论
0 点赞
spring配置
Spring 配置:import 这个import,一般用于团队开发使用,他可以将多个配置文件,导入合并为一个DI依赖注入:构造器注入set注入【重点】依赖: bean对象的创建依赖于容器!注入: bean对象中的所有属性,由容器来注入!拓展注入Bean的自动装配自动装配是Spring满足bean依赖一种方式!Spring会在上下文中自动寻找,并自动给bean装配属性!在Spring中有三种装配的方式1.在xml中显示的配置2.在java中显示配置3.隐式的自动装配beanByname自动装配<!--byName:会自动在容器上下文中查找,和自己对象set方法后面的值对应的beanid !--> <bean id="pepar" class="com.xu.pojo.Pepar" autowire="byName"> <!--<property name="dog" ref="dog"/> <property name="cat" ref="cat"/>--> <property name="name" value="徐少"/> </bean> Bytype自动装配<!-- byType:会自动在容器上下文中查找,和自己对象属性类型相同的bean !--> <bean id="pepar" class="com.xu.pojo.Pepar" autowire="byType"> <!--<property name="dog" ref="dog"/> <property name="cat" ref="cat"/>--> <property name="name" value="徐少"/> </bean>小结: byname的时候,需要保证所有bean的id唯一,并且这个bean需要和自动注入的属性的set方法的值一致!bytype的时候,需要保证所有bean的class唯一,并且这个bean需要和自动注入的属性的类型一致! #### 使用注解自动装配要使用注解须知:1.导入约束 context约束2.配置注解的支持 开启注解支持 <!--开启注解支持--> <context:annotation-config/>配置注解<?xm7 version="1.0" encoding="UTF-8"?> <beans xm1ns="http : //www.springframework.org/schema/beans" xm1ns :xsi="http : / /www. w3.org /2001/XMLschema-instance" xm1ns:context="http : / /www.springframework.org/schema/context"xsi : schemaLocation="http : / /www.springframework.org/schema/beans https : //www.springframework.org/schema/beans/spring-beans.xsdhttp : / /www.springframework.org/schema/context https: //www.springframework.org/schema/context/spring-context.xsd"; <context: annotation-config/> </beans>
2022年01月05日
15 阅读
0 评论
0 点赞
2022-01-04
Spring 入门笔记
spring的绿草丛Spring 轻量级框架,java EE的春天,当前主流框架目标 使现有技术更加易用,推进编码最佳实践内容 ioc容器AOP实现 数据访问支持 (简化JDBC/ORM 框架) (声明式事务) Web集成Spring体系结构 Core Container(Beans Core Context)Spring设计理念:Spring是面向Bean的编程Spring 两大核心技术(1)控制反转:(IOC:Inversion of Control)/依赖注入(DI:Dependency Injection)(2)面向切面编程(AOP: Aspect Oriented Programming)Spring的优点(1)低侵入式设计(2)独立于各种服务器(3)依赖注入特性将组建关系透明化,降低了耦合度(4)面向切面编程特性允许将通用人物进行集中式处理(5)于第三方框架的良好整合 控制反转 :将组件对象的控制权从代码本身转移到外部容器(1)组件化的思想:分离关注点,使用接口,不再关注实现(2)目的:解耦合,实现每个组件时只关注组件内部的事情(3)要点:明确定义组件间的接口 依赖的注入 :将组件的构建和使用分开代码创建实体类 helloSpring {collapse}{collapse-item label="ApplicationContext.xml 配置"}<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd"> <!-- 配置bean id:唯一名称 --> <bean id="helloSpring" class="com.xyh.hello.helloSpring"> <!-- 属性的设值注入 --> <property name="name" value="小新"></property> <property name="age" value="20"></property> </bean> </beans>{/collapse-item}{collapse-item label="测试类"}package com.xyh.test; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.xyh.hello.helloSpring; public class TesthelloSpring { @Test public void test1(){ ApplicationContext cot=new ClassPathXmlApplicationContext("ApplicationContext.xml"); helloSpring hs = (helloSpring) cot.getBean("helloSpring"); hs.print(); } } {/collapse-item}{/collapse}构造参数传递第一种:根据参数名 赋值<bean id="user" class="com.xyh.pojo.User"> <constructor-arg name="name" value="我来看看spring"></constructor-arg> </bean>第二种:根据参数下标赋值<bean class="com.xyh.pojo.User" id="user"> <constructor-arg index="0" value="小新博客"></constructor-arg> </bean>第三种:根据类型赋值(不推荐)<bean class="com.xyh.pojo.User" id="user"> <constructor-arg type="java.lang.String" value="www.yy0228.cn"></constructor-arg> </bean>Spring配置别名<!--别名,如果添加了别名,我们也可以使用别名获取到这个对象--> <alias name="user" alias="user2"/>Bean的配置<!-- id:bean的唯一标识符,相当于对象名 class:bean对象所对应的全限定名:包名+类名 name:也是别名,还可以同时起多个别名 --> <bean id="user" class="com.xyh.pojo.User" name="user3,user4"> <constructor-arg name="name" value="我是小新"></constructor-arg> </bean>import (一般用于团队开发使用,将多个配置导入到一个)<import resource="beans.xml"/>面向切面编程(AOP)AOP的目标: 让我们可以 “专心做事”; AOP原理:将复杂的需求分解出不同方面,将散布在系统中的公共功能集中解决采用代理机制组装起来运行,在不改变原程序的基础上对代码进行增强处理,增加新的功能通过代理对象调用原对象的方法代理对象方法前后都可以插入代码,这些就是增强处理所谓面向切面编程,是一种通过预编译和运行期动态代理的方式实现在不修改源代码的情况下给程序动态添加功能的技术 AOP相关术语增强处理(Advice) 前置增强后置增强 环绕增强、异常抛出增强、最终增强等类型切入点(Pointcut)连接点(Join Point)切面(Aspect)目标对象(Target object)AOP代理(AOP proxy)织入(Weaving)怎样使用AOP实现步骤1.在项目中添加Spring AOP的jar文件2.编写前置增强和后置增强实现日志功能package com.xyh.Aspect; import org.apache.log4j.Logger; import org.aspectj.lang.JoinPoint; import java.util.Arrays; public class SerivceAspect { Logger logger = Logger.getLogger(SerivceAspect.class); public void before(JoinPoint jp){ logger.info("前置增强:进入了"+jp.getTarget() +"对象的"+jp.getSignature().getName()+"()方法,传递参数"+ Arrays.toString(jp.getArgs())); } public void afterReturning(JoinPoint jp,Object res){ logger.info("后置增强:进入了"+jp.getTarget() +"对象的"+jp.getSignature().getName()+"()方法,返回参数"+ res ); } } 3.编写Spring配置文件,对业务方法进行增强处理<?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd"> <bean id="userDao" class="com.xyh.dao.UserDao"></bean> <bean id="userSerivce" class="com.xyh.Serivce.UserSerivce"> <property name="userDao" ref="userDao"></property> </bean> <bean id="serivceAspect" class="com.xyh.Aspect.SerivceAspect"></bean> <aop:config> <aop:pointcut id="pc" expression="execution(* com.xyh.Serivce..*.*(..))"/> <aop:aspect ref="serivceAspect"> <aop:before method="before" pointcut-ref="pc"/> <aop:after-returning method="afterReturning" pointcut-ref="pc" returning="res"/> </aop:aspect> </aop:config> </beans>4.编写代码获取带有增强处理的业务对象package com.xyh.TestSerivce; import com.xyh.Serivce.UserSerivce; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.testng.annotations.Test; public class Testserivce { @Test public void test(){ ApplicationContext ctx = new ClassPathXmlApplicationContext("ApplicationContext.xml"); UserSerivce userSerivce = (UserSerivce) ctx.getBean("userSerivce"); int i = userSerivce.addUser("张浩", "12345678", 20); if (i>0) { System.out.println("添加成功!"); }else{ System.out.println("添加失败!"); } } } 成功运行截图
2022年01月04日
141 阅读
0 评论
1 点赞