提示:本文章为本人系统学习java一个半月后第一次案例的总结,因此会有很多小问题,不喜勿喷
提示:以下是本篇文章正文内容,下面案例可供参考
数据库表 tb_brand
实体类 Brand
MyBatis 基础环境(Mybatis-config.xml、 xxxMapper.xml、xxxMapper接口)
包结构
项目
1.main包下:
mapper包(Dao包):接口
pojo包:实体类
util包:工具类
service包:业务代码
web包:web层代码下又有servlet包等
2.webapp包下:
放前端显示页面的
3.test包下:
代码测试
1.web包下创建XXXservlet.java,代码如下:
//1. 调用brandService完成查询
List brands = brandService.selectAll();
//2. 将list集合写道request域中
req.setAttribute("brands",brands);
//3. 转发brand.jsp
req.getRequestDispatcher("/brandList.jsp").forward(req,resp);
2.创建brandservice中的selectAll方法(因为XXXservlet.java中并没有selectAll()方法),代码如下:
//1. 调用 BrandMapper 查询所有功能
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//2. 获取SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//3. 获取BrandMapper对象
BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
//4.调用方法
List<Brand> brands = brandMapper.selectAll();
//5. 返回一个brands值
return brands;
3.创建一个xxxmapper的接口,代码如下:
@Select("select * from tb_brand")
@ResultMap("brandResultMap")
List<Brand> selectAll();
1.web包下创建XXXservlet.java,代码如下:
//自动封装数据,将表单数据封装为pojo对象
//1. 一次性将数据全部获取
Map<String, String[]> map = req.getParameterMap();
// System.out.println(map);
//2. 将map集合转化为一个pojo对象
Brand b = new Brand();
try {
BeanUtils.populate(b,map);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
//3. 调用BrandService方法
brandService.add(b);
// System.out.println(b);
//4. 查询添加数据
String contextPath = req.getContextPath();
resp.sendRedirect(contextPath+"/selectAll");
}
2.创建brandservice中的add方法,代码如下:
private SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();
3.创建一个xxxmapper的接口,代码如下:
@Insert("insert into tb_brand values(null,#{brandName},#{companyName},#{ordered},#{description},#{status})")
void add(Brand brand);
1.web包下创建XXXservlet.java,代码如下:
//1. 接受数据
String idTemp = req.getParameter("id");
Integer id = Integer.parseInt(idTemp);
//2. 调用brandService完成查询
Brand brand = brandService.selectById(id);
//3. 将brand对象存储到reques域中
req.setAttribute("brand",brand);
//4. 转发到updateBrand.jsp
req.getRequestDispatcher("/updateBrand.jsp").forward(req,resp);
2.创建brandservice中的selectById方法,代码如下:
3.创建一个xxxmapper的接口,代码如下:
@Select("select * from tb_brand where id = #{id}")
@ResultMap("brandResultMap")
Brand selectById(Integer id)
1.web包下创建XXXservlet.java,代码如下:
//1. 获取数据封装成对象
Map<String, String[]> map = req.getParameterMap();
//2. 将map集合转化为一个pojo对象
Brand brand = new Brand();
try {
BeanUtils.populate(brand,map);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
//3. 调用brandService方法
brandService.update(brand);
//4. 查询添加数据
String contextPath = req.getContextPath();
resp.sendRedirect(contextPath + "/selectAll");
2.创建brandservice中的update方法,代码如下:
3.创建一个xxxmapper的接口,代码如下:
@Update("update tb_brand set brand_name = #{brandName}, company_name = #{companyName},ordered = #{ordered},description = #{description},status = #{status} where id = #{id}")
void update(Brand brand);
1.web包下创建XXXservlet.java,代码如下:
//1. 接受数据
String idTemp = req.getParameter("id");
Integer id = Integer.parseInt(idTemp);
//2. 调用service删除
brandService.deleteById(id);
//3. 重定向到查询Servlet
String contextPath = req.getContextPath();
resp.sendRedirect(contextPath + "/selectAll");
2.创建brandservice中的deleteById方法,代码如下:
3.在brandmapper接口中,代码如下:
@Delete("delete from tb_brand where id=#{id}")
void deleteById(Integer id);
1.优化上述代码XXXservice中都有一段相同的调用 BrandMapper 查询所有功能的代码,所以可以将此段代码抽取为SqlSessionFactoryUtils工具类,代码如下:
private static SqlSessionFactory sqlSessionFactory;
private SqlSessionFactoryUtils(){}
static{
String resource = "mybatis-config.xml";
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream(resource);
} catch (IOException e) {
e.printStackTrace();
}
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
public static SqlSessionFactory getSqlSessionFactory(){
return sqlSessionFactory;
}
}
2.maven核心配置文件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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
在此次写案例中遇到了界面跳转出现只有表头没有表格下半部分的问题。
添加功能实现时不报错,单添加内容没有添加到数据库。
整个案例让我认识到自己的io流,注解,resquest,response,javascript,htm,转发,重定向等内容都是一知半解。