jdbc.properties:
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://49.234.118.92:3306/heima_mm jdbc.username=root jdbc.password=123456SqlMapConfig.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"> <!--mybatis的主配置文件--> <configuration> <!--定义property的配置--> <properties resource="jdbc.properties"></properties> <!--配置别名:别名配置是给实体类用的,不能用在dao上--> <typeAliases> <!--指定实体类所在的包,此时包下所有类都会注册别名,别名就是类名称--> <package name="com.itheima.domain"></package> </typeAliases> <!--配置分页插件,plugins标签有出现顺序要求,必须在environments之前,同时要在properties和typeAliases之后 --> <plugins> <!-- com.github.pagehelper.PageInterceptor --> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <property name="helperDialect" value="mysql" /> <property name="reasonable" value="true" /> </plugin> </plugins> <!--配置默认环境--> <environments default="mysql"> <!--配置mysql的环境--> <environment id="mysql"> <!--配置事务的类型--> <transactionManager type="JDBC"></transactionManager> <!--配置数据源信息--> <dataSource type="POOLED" > <!--配置连接数据库的四个基本信息--> <property name="driver" value="${jdbc.driver}"></property> <property name="url" value="${jdbc.url}"></property> <property name="username" value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> </dataSource> </environment> </environments> <!--配置映射配置文件的位置--> <mappers> <!--指定实体映射配置文件所在的包,指定的是dao接口所在的包--> <package name="com.itheima.dao"></package> </mappers> </configuration>CompanyDao.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.itheima.dao.store.CompanyDao"> <!--配置实体类属性和数据库表中列的对应关系--> <resultMap id="BaseResultMap" type="com.itheima.domain.store.Company"> <id column="id" jdbcType="VARCHAR" property="id"/> <result column="name" jdbcType="VARCHAR" property="name"/> <result column="expiration_date" jdbcType="TIMESTAMP" property="expirationDate"/> <result column="address" jdbcType="VARCHAR" property="address"/> <result column="license_id" jdbcType="VARCHAR" property="licenseId"/> <result column="representative" jdbcType="VARCHAR" property="representative"/> <result column="phone" jdbcType="VARCHAR" property="phone"/> <result column="company_size" jdbcType="VARCHAR" property="companySize"/> <result column="industry" jdbcType="VARCHAR" property="industry"/> <result column="remarks" jdbcType="VARCHAR" property="remarks"/> <result column="state" jdbcType="INTEGER" property="state"/> <result column="city" jdbcType="VARCHAR" property="city"/> </resultMap> <!--配置查询的列名公共SQL语句--> <sql id="Base_Column_List"> id, name, expiration_date, address, license_id, representative, phone, company_size, industry, remarks, state, city </sql> <!--配置查询所有,带条件--> <select id="findAll" resultMap="BaseResultMap"> select <include refid="Base_Column_List"/> from st_company </select> <!--配置根据ID查询--> <select id="findById" parameterType="java.lang.String" resultMap="BaseResultMap"> select <include refid="Base_Column_List"/> from st_company where id = #{id,jdbcType=VARCHAR} </select> <!--配置根据id删除--> <delete id="delete" parameterType="java.lang.String"> delete from st_company where id = #{id,jdbcType=VARCHAR} </delete> <!--配置全字段插入--> <insert id="save" parameterType="com.itheima.domain.store.Company"> insert into st_company (id, name, expiration_date, address, license_id, representative, phone, company_size, industry, remarks, state, city) values (#{id,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{expirationDate,jdbcType=TIMESTAMP}, #{address,jdbcType=VARCHAR}, #{licenseId,jdbcType=VARCHAR}, #{representative,jdbcType=VARCHAR}, #{phone,jdbcType=VARCHAR}, #{companySize,jdbcType=VARCHAR}, #{industry,jdbcType=VARCHAR}, #{remarks,jdbcType=VARCHAR}, #{state,jdbcType=INTEGER}, #{city,jdbcType=VARCHAR}) </insert> <!--配置全字段更新--> <update id="update" parameterType="com.itheima.domain.store.Company"> update st_company set name = #{name,jdbcType=VARCHAR}, expiration_date = #{expirationDate,jdbcType=TIMESTAMP}, address = #{address,jdbcType=VARCHAR}, license_id = #{licenseId,jdbcType=VARCHAR}, representative = #{representative,jdbcType=VARCHAR}, phone = #{phone,jdbcType=VARCHAR}, company_size = #{companySize,jdbcType=VARCHAR}, industry = #{industry,jdbcType=VARCHAR}, remarks = #{remarks,jdbcType=VARCHAR}, state = #{state,jdbcType=INTEGER}, city = #{city,jdbcType=VARCHAR} where id = #{id,jdbcType=VARCHAR} </update> </mapper> 4.工具类 package com.itheima.factory; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.InputStream; /** * 用于生成dao接口代理实现类的工厂 * @author 黑马程序员 * @Company http://www.itheima.com */ public class MapperFactory { private static SqlSessionFactory factory; private static ThreadLocal<SqlSession> tl = new ThreadLocal<SqlSession>(); static { InputStream in = null; try { //1.读取mybatis主配置文件 in = Resources.getResourceAsStream("SqlMapConfig.xml"); //2.创建构建者对象 SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); //3.使用构建者创建SqlSessionFactory工厂 factory = builder.build(in); }catch (Exception e){ //打印异常信息到控制台 e.printStackTrace(); //抛出错误提示程序终止执行 throw new ExceptionInInitializerError("初始化SqlSessionFactory失败"); }finally { //释放流对象 if(in != null){ try{ in.close(); }catch (Exception e){ e.printStackTrace(); } } } } /** * 获取SqlSession对象 * @return * 保留此方法是为了后面对业务层方法增强,利用AOP添加事务 */ public static SqlSession getSqlSession(){ return factory.openSession(false); } /** * 获取Dao接口的代理实现类 * @param daoClass dao接口字节码 * @return */ public static <T> T getMapper(SqlSession sqlSession,Class<T> daoClass){ //1.判断传入的SqlSession是否为null if(sqlSession == null){ return null; } //2.不为null,创建代理实现类 return sqlSession.getMapper(daoClass); } } package com.itheima.utils; import org.apache.ibatis.session.SqlSession; /** * 事务控制类 * @author 黑马程序员 * @Company http://www.itheima.com */ public class TransactionUtil { /** * 提交释放 * @param sqlSession */ public static void commit(SqlSession sqlSession){ if(sqlSession!=null) { sqlSession.commit(); } } /** * 回滚释放 * @param sqlSession */ public static void rollback(SqlSession sqlSession){ if(sqlSession!=null) { sqlSession.rollback(); } } /** * 单独释放 * @param sqlSession */ public static void close(SqlSession sqlSession){ if(sqlSession!=null) sqlSession.close(); } }package com.itheima.service.store; import com.github.pagehelper.PageInfo; import com.itheima.domain.store.Company; import java.util.List; public interface CompanyService { /** * 添加 * @param company * @return */ void save(Company company); /** * 删除 * @param company * @return */ void delete(Company company); /** * 修改 * @param company * @return */ void update(Company company); /** * 查询单个 * @param id 查询的条件(id) * @return 查询的结果,单个对象 */ Company findById(String id); /** * 查询全部的数据 * @return 全部数据的列表对象 */ List<Company> findAll(); /** * 分页查询数据 * @param page 页码 * @param size 每页显示的数据总量 * @return */ PageInfo findAll(int page,int size); } package com.itheima.service.store.impl; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.itheima.dao.store.CompanyDao; import com.itheima.domain.store.Company; import com.itheima.factory.MapperFactory; import com.itheima.service.store.CompanyService; import com.itheima.utils.TransactionUtil; import org.apache.ibatis.session.SqlSession; import java.util.List; import java.util.UUID; public class CompanyServiceImpl implements CompanyService { @Override public void save(Company company) { SqlSession sqlSession = null; try{ //1.获取SqlSession sqlSession = MapperFactory.getSqlSession(); //2.获取Dao CompanyDao companyDao = MapperFactory.getMapper(sqlSession,CompanyDao.class); //id使用UUID的生成策略来获取 String id = UUID.randomUUID().toString(); company.setId(id); //3.调用Dao层操作 companyDao.save(company); //4.提交事务 TransactionUtil.commit(sqlSession); }catch (Exception e){ TransactionUtil.rollback(sqlSession); throw new RuntimeException(e); //记录日志 }finally { try { TransactionUtil.close(sqlSession); }catch (Exception e){ e.printStackTrace(); } } } @Override public void delete(Company company) { SqlSession sqlSession = null; try{ //1.获取SqlSession sqlSession = MapperFactory.getSqlSession(); //2.获取Dao CompanyDao companyDao = MapperFactory.getMapper(sqlSession,CompanyDao.class); //3.调用Dao层操作 companyDao.delete(company); //4.提交事务 TransactionUtil.commit(sqlSession); }catch (Exception e){ TransactionUtil.rollback(sqlSession); throw new RuntimeException(e); //记录日志 }finally { try { TransactionUtil.close(sqlSession); }catch (Exception e){ e.printStackTrace(); } } } @Override public void update(Company company) { SqlSession sqlSession = null; try{ //1.获取SqlSession sqlSession = MapperFactory.getSqlSession(); //2.获取Dao CompanyDao companyDao = MapperFactory.getMapper(sqlSession,CompanyDao.class); //3.调用Dao层操作 companyDao.update(company); //4.提交事务 TransactionUtil.commit(sqlSession); }catch (Exception e){ TransactionUtil.rollback(sqlSession); throw new RuntimeException(e); //记录日志 }finally { try { TransactionUtil.close(sqlSession); }catch (Exception e){ e.printStackTrace(); } } } @Override public Company findById(String id) { SqlSession sqlSession = null; try{ //1.获取SqlSession sqlSession = MapperFactory.getSqlSession(); //2.获取Dao CompanyDao companyDao = MapperFactory.getMapper(sqlSession,CompanyDao.class); //3.调用Dao层操作 return companyDao.findById(id); }catch (Exception e){ throw new RuntimeException(e); //记录日志 }finally { try { TransactionUtil.close(sqlSession); }catch (Exception e){ e.printStackTrace(); } } } @Override public List<Company> findAll() { SqlSession sqlSession = null; try{ //1.获取SqlSession sqlSession = MapperFactory.getSqlSession(); //2.获取Dao CompanyDao companyDao = MapperFactory.getMapper(sqlSession,CompanyDao.class); //3.调用Dao层操作 return companyDao.findAll(); }catch (Exception e){ throw new RuntimeException(e); //记录日志 }finally { try { TransactionUtil.close(sqlSession); }catch (Exception e){ e.printStackTrace(); } } } @Override public PageInfo findAll(int page, int size) { SqlSession sqlSession = null; try{ //1.获取SqlSession sqlSession = MapperFactory.getSqlSession(); //2.获取Dao CompanyDao companyDao = MapperFactory.getMapper(sqlSession,CompanyDao.class); //3.调用Dao层操作 PageHelper.startPage(page,size); List<Company> all = companyDao.findAll(); PageInfo pageInfo = new PageInfo(all); return pageInfo; }catch (Exception e){ throw new RuntimeException(e); //记录日志 }finally { try { TransactionUtil.close(sqlSession); }catch (Exception e){ e.printStackTrace(); } } } }
package com.itheima.web.controller.store; import com.github.pagehelper.PageInfo; import com.itheima.domain.store.Company; import com.itheima.utils.BeanUtil; import com.itheima.web.controller.BaseServlet; import org.apache.commons.lang3.StringUtils; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; // uri:/store/company?operation=list @WebServlet("/store/company") public class CompanyServlet extends BaseServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String operation = request.getParameter("operation"); if("list".equals(operation)){ this.list(request,response); }else if("toAdd".equals(operation)){ this.toAdd(request,response); }else if("save".equals(operation)){ this.save(request, response); }else if("toEdit".equals(operation)){ this.toEdit(request,response); }else if("edit".equals(operation)){ this.edit(request,response); }else if("delete".equals(operation)){ this.delete(request,response); } } private void list(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { //进入列表页 //获取数据 // CompanyService companyService = new CompanyServiceImpl(); int page = 1; int size = 5; if(StringUtils.isNotBlank(request.getParameter("page"))){ page = Integer.parseInt(request.getParameter("page")); } if(StringUtils.isNotBlank(request.getParameter("size"))){ size = Integer.parseInt(request.getParameter("size")); } PageInfo all = companyService.findAll(page, size); //将数据保存到指定的位置 request.setAttribute("page",all); //跳转页面 request.getRequestDispatcher("/WEB-INF/pages/store/company/list.jsp").forward(request,response); } private void toAdd(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { //跳转页面 request.getRequestDispatcher("/WEB-INF/pages/store/company/add.jsp").forward(request,response); } private void save(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { //将数据获取到,封装成一个对象 Company company = BeanUtil.fillBean(request,Company.class,"yyyy-MM-dd"); //调用业务层接口save // CompanyService companyService = new CompanyServiceImpl(); companyService.save(company); //跳转回到页面list //list(request,response); response.sendRedirect(request.getContextPath()+"/store/company?operation=list"); } private void toEdit(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //查询要修改的数据findById String id = request.getParameter("id"); // CompanyService companyService = new CompanyServiceImpl(); Company company = companyService.findById(id); //将数据加载到指定区域,供页面获取 request.setAttribute("company",company); //跳转页面 request.getRequestDispatcher("/WEB-INF/pages/store/company/update.jsp").forward(request,response); } private void edit(HttpServletRequest request, HttpServletResponse response) throws IOException { //将数据获取到,封装成一个对象 Company company = BeanUtil.fillBean(request,Company.class,"yyyy-MM-dd"); //调用业务层接口save // CompanyService companyService = new CompanyServiceImpl(); companyService.update(company); //跳转回到页面list //list(request,response); response.sendRedirect(request.getContextPath()+"/store/company?operation=list"); } private void delete(HttpServletRequest request, HttpServletResponse response) throws IOException { //将数据获取到,封装成一个对象 Company company = BeanUtil.fillBean(request,Company.class); //调用业务层接口save // CompanyService companyService = new CompanyServiceImpl(); companyService.delete(company); //跳转回到页面list //list(request,response); response.sendRedirect(request.getContextPath()+"/store/company?operation=list"); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request,response); } }
aside.jsp
<li id="company-manager"> <a href="${ctx}/store/company?operation=list" onclick="setSidebarActive(this)" target="iframe"> <i class="fa fa-circle-o"></i>企业管理 </a> </li>