#??DEBUG???
log4j.logger.DEBUGA=DEBUG
log4j.appender.DEBUGA=org.apache.log4j.DailyRollingFileAppender
log4j.appender.DEBUGA.layout=org.apache.log4j.PatternLayout
log4j.appender.DEBUGA.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n
log4j.appender.DEBUGA.datePattern=yyyy-MM-dd’.log’
log4j.appender.DEBUGA.Threshold = DEBUG
log4j.appender.DEBUGA.append=true
log4j.appender.DEBUGA.File=d:/log/debug_log.log
#??sql??
log4j.logger.com.ibatis=DEBUG
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
**mabatis-config.xml**
<?xml version="1.0" encoding="UTF-8" ?>
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<typeAliases>
<package name="com.wanshi.bean"/>
</typeAliases>
<mappers>
<mapper resource="com/wanshi/mapper/UserInfoMapper.xml"/>
<mapper resource="com/wanshi/mapper/GoodsMapper.xml"/>
</mappers>
**spring-dao.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"
xmlns:context="http://www.springframework.org/schema/context"
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">
<!-- 配置整合mybatis -->
<!-- 1.关联数据库文件 -->
<context:property-placeholder location="classpath:database.properties"/>
<context:property-placeholder location="classpath:log4j.properties"/>
<!-- 2.数据库连接池 -->
<!--数据库连接池
dbcp 半自动化操作 不能自动连接
c3p0 自动化操作(自动的加载配置文件 并且设置到对象里面)
-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!-- 配置连接池属性 -->
<property name="driverClass" value="${jdbc.driver}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<!-- c3p0连接池的私有属性 -->
<property name="maxPoolSize" value="30"/>
<property name="minPoolSize" value="10"/>
<!-- 关闭连接后不自动commit -->
<property name="autoCommitOnClose" value="false"/>
<!--获取连接超时时间 -->
<property name="checkoutTimeout" value="10000"/>
<!-- 当获取连接失败重试次数 -->
<property name="acquireRetryAttempts" value="2"/>
</bean>
<!-- 3.配置SqlSessionFactory对象 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注入数据库连接池 -->
<property name="dataSource" ref="dataSource"/>
<!-- 配置MyBaties全局配置文件:mybatis-config.xml -->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
<!-- 4.配置扫描Dao接口包,动态实现Dao接口注入到spring容器中 -->
<!--解释 :https://www.cnblogs.com/jpfss/p/7799806.html-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 注入sqlSessionFactory -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<!-- 给出需要扫描Dao接口包 -->
<property name="basePackage" value="com.wanshi.mapper"/>
</bean>
**spring-service.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"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 扫描service相关的bean -->
<context:component-scan base-package="com.wanshi.service" />
<!--BookServiceImpl注入到IOC容器中-->
<bean id="UserInfoServiceImpl" class="com.wanshi.service.impl.UserInfoServiceImpl">
<property name="userInfoMapper" ref="userInfoMapper"/>
</bean>
<bean id="GoodsServiceImpl" class="com.wanshi.service.impl.GoodsServiceImpl">
<property name="goodsMapper" ref="goodsMapper"/>
</bean>
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 注入数据库连接池 -->
<property name="dataSource" ref="dataSource" />
</bean>
**spring-mvc.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"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 1.注解驱动-->
<mvc:annotation-driven/>
<!-- 2.静态资源过滤-->
<mvc:default-servlet-handler/>
<!-- 3.扫描包:controller-->
<context:component-scan base-package="com.wanshi.controller"/>
<!-- 4.视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean id="loginInterceptor" class="com.wanshi.interceptor.LoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
**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.xsd">
<import resource="classpath:spring-dao.xml"/>
<import resource="classpath:spring-service.xml"/>
<import resource="classpath:spring-mvc.xml"/>
[]( )核心源代码
========================================================================
* * *
**UserController**
package com.wanshi.controller;
import com.wanshi.bean.UserInfo;
import com.wanshi.service.UserInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpSession;
@Controller
@RequestMapping(“/user”)
public class UserController {
@Autowired
@Qualifier("UserInfoServiceImpl")
private UserInfoService userInfoService;
@RequestMapping("/register")
public String register() {
return "register";
}
@RequestMapping("/registerPost")
public String registerPost(UserInfo userInfo){
userInfoService.save(userInfo);
return "login";
}
@RequestMapping("/loginPost")
public String loginPost(HttpSession session,UserInfo userInfo){
UserInfo u1 = userInfoService.get(userInfo);
session.setAttribute("user", u1);
if (u1 != null) {
return "redirect:/goods/list";
}
return "register";
}
}
**GoodsController**
package com.wanshi.controller;
import com.wanshi.bean.Goods;
import com.wanshi.bean.Page;
import com.wanshi.service.GoodsService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.List;
@Controller
@RequestMapping(“/goods”)
public class GoodsController {
@Autowired
@Qualifier("GoodsServiceImpl")
private GoodsService goodsService;
private static final Integer PAGE_SIZE = 2;
@RequestMapping("/list")
public String list(String pageNumb, String buyerName, Model model) {
Integer pageNum = 1;
if (pageNumb != null && !pageNumb.equals("")) {
pageNum = Integer.valueOf(pageNumb);
}
Page<Goods> pager = goodsService.list(pageNum, PAGE_SIZE, buyerName);
model.addAttribute("pager", pager);
model.addAttribute("buyerName", buyerName);
return "goods/list";
}
@RequestMapping("/add")
public String add(){
return "goods/add";
}
@RequestMapping("/addGoods")
public String addGoods(Goods goods){
goodsService.save(goods);
return "redirect:/goods/list";
}
@RequestMapping("/edit/{orderId}")
public String edit(@PathVariable("orderId") Integer orderId, Model model) {
Goods goods = goodsService.get(orderId);
model.addAttribute("goods", goods);
return "goods/edit";
}
@RequestMapping("/editPost")
public String editPost(Goods goods) {
goodsService.update(goods);
return "redirect:/goods/list";
}
@RequestMapping("/del/{orderId}")
public String del(@PathVariable("orderId") Integer orderId) {
goodsService.delete(orderId);
return "redirect:/goods/list";
}
}
**LoginInterceptor**
package com.wanshi.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginInterceptor implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//1.对登录,注册,风格直接放行
//获取请求的uri地址
String uri = request.getRequestURI();
if (uri.contains("login") || uri.contains("register")) {
return true;
}
//2.进行session验证
Object user = request.getSession().getAttribute("user");
if (user == null) {
request.getRequestDispatcher("/WEB-INF/jsp/login.jsp")
.forward(request, response);
return false;
}
return true;
}
}
**Page分页类**
package com.wanshi.bean;
import java.util.ArrayList;
import java.util.List;
/**
-
该类的使用方法必须严格按照一下流程
-
1 计算得到 总记录数 rowCount
-
2 使用带参构造方法初始化,例如 Page page1 = new Page(3, 5, 57 );
-
3 设置当前页记录 page1.setList(list1 );
-
@author Administrator
-
@param
*/
public class Page {
/**
* 当前页码前的页码数
*/
private static final int BeforePageNumbCount = 4;
/**
* 当前页码后的页码数
*/
private static final int AfterPageNumbCount = 3;
/**
* 当前页码
*/
private int currPage;
/**
* 总记录数
*/
private int rowCount;
/**
* 每页记录数
* 该参数就是 limit arg1,arg2 中的第2个参数 arg2
*/
private int pageSize;
/**
* 总页数
*/
private int pageCount;
/**
* 前1页页码
*/
private int prevPageNumb;
/**
* 后一页页码
*/
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
最后
面试是跳槽涨薪最直接有效的方式,马上金九银十来了,各位做好面试造飞机,工作拧螺丝的准备了吗?
掌握了这些知识点,面试时在候选人中又可以夺目不少,暴击9999点。机会都是留给有准备的人,只有充足的准备,才可能让自己可以在候选人中脱颖而出。
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img-MfY9x4U2-1712768521960)]
[外链图片转存中…(img-CZk54VBr-1712768521961)]
[外链图片转存中…(img-JYPtemTy-1712768521961)]
[外链图片转存中…(img-5Js2apzu-1712768521962)]
[外链图片转存中…(img-Uq7hXXmx-1712768521962)]
[外链图片转存中…(img-e1rAOSGW-1712768521962)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-pLZtegfP-1712768521963)]
最后
面试是跳槽涨薪最直接有效的方式,马上金九银十来了,各位做好面试造飞机,工作拧螺丝的准备了吗?
掌握了这些知识点,面试时在候选人中又可以夺目不少,暴击9999点。机会都是留给有准备的人,只有充足的准备,才可能让自己可以在候选人中脱颖而出。
[外链图片转存中…(img-Nn4HT5gR-1712768521963)]
[外链图片转存中…(img-fyBXFddp-1712768521963)]
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-pO1IiGHz-1712768521964)]