在pom.xml增加相应的依赖
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.3</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 前端应用thymeleaf来代替jsp --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> </dependencies>
配置文件配置数据库等
#server server.port=80 #我的项目名:server.servlet.context-path #spring dataSource spring.datasource.url=jdbc:mysql:///dbgoods?serverTimezone=GMT%2B8&characterEncoding=utf8 spring.datasource.username=root spring.datasource.password=root mybatis.mapper-locations=classpath:/mapper/*/*.xml #spring log logging.level.com.cy=debug #spring thymeleaf(如果没有配置也会默认配置,在默认配置中prefix默认值为classpath:/templates/,后缀默认为.html) #不必重启服务器,网页就能刷新 spring.thymeleaf.cache=false spring.thymeleaf.prefix=classpath:/templates/pages/ spring.thymeleaf.suffix=.html
数据层增加相应注解实现sql语句(或者通过xml配置来实现)
数据层封装了商品信息,并提供get和set办法,为Goods类
1.查问所有数据
@Select("select * from tb_goods") List<Goods> findAll();
2.依照id删除数据
@Delete("delete from tb_goods where id=#{id}") int deleteById(Integer id);
3.批改数据
(1)批改数据首先要新建一个界面,依照id查找内容,并将查找到的内容显示到文本框内
@Select("select * from tb_goods where id=#{id}") Goods findById(Integer id);
(2)再增加查找的办法
@Update("update tb_goods set name=#{name},remark=# {remark},createdTime=now() where id=#{id}") int update(Goods goods);
4.新增数据
@Insert("insert into tb_goods(name,remark,createdTime) values (#{name},#{remark},now())") int add(Goods goods);
业务层提供对应接口办法和实现类
1.业务层接口
public interface GoodsService { List<Goods> findObject(); int add(Goods goods); int update(Goods goods); Goods findById(Integer id);}
2.业务层实现类
@Servicepublic class GoodsServiceImpl implements GoodsService { @Autowired private GoodsDao goodsDao; @Override public List<Goods> findObject() { long start=System.currentTimeMillis(); List<Goods> list = goodsDao.findObjects(); long end=System.currentTimeMillis(); System.out.println("query time:"+(end-start)); return list; } @Override public int add(Goods goods) { return goodsDao.add(goods); } @Override public int update(Goods goods) { return goodsDao.update(goods); } @Override public Goods findById(Integer id) { return goodsDao.findById(id); }
管制层写具体实现
1.跳转到首页并且查找所有商品
@RequestMapping("doGoodsUI") public String doGoodsUI(Model model) { List<Goods> list = goodsService.findObject(); model.addAttribute("goods",list); return "goods"; }
2.删除商品
@RequestMapping("doDeleteById/{id}")// (@PathVariable Integer id)通知服务器,id拿到的是从网页上同样叫id的数据 public String dodeletebyId(@PathVariable Integer id){ int delete = goodsDao.deleteById(id); //doGoodsUI后面没有加/的话,跳转的网址是代替了最初一个/前面的内容 return "redirect:/goods/doGoodsUI"; }
3.批改商品
(1)先将查找进去的商品显示在文本框中
@RequestMapping("doFindById/{id}") public String doFindByID(@PathVariable Integer id,Model model){ Goods goods = goodsService.findById(id); model.addAttribute("goods",goods); return "goods-update"; }
(2)实现批改
@RequestMapping("doUpdateGoods") public String doUpdateGoods(Goods goods){ goodsService.update(goods); return "redirect:/goods/doGoodsUI"; }
4.新增商品
@RequestMapping("doSaveGoods") public String doSaveGoods(Goods goods){ goodsService.add(goods); return "redirect:/goods/doGoodsUI"; }
前端采纳html+thymeleaf模板代替jsp
1.thymeleaf的语法参考:https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#link-urls
2.each示意遍历拿到的数组,goods是从管制层拿到的model的名字
3.id,name和remark与数据库对应,date要格式化拿到数据,该语法是thymeleaf固定写法
<tr th:each="g:${goods}"> <td th:text="${g.id}">1</td> <td th:text="${g.name}">AAAAAAA</td> <td th:text="${g.remark}">aa</td> <td th:text="${#dates.format(g.createdTime,'yyyy-MM-dd HH:mm')}">aa</td><!-- <td><a href="#" th:href="@{/goods/doDeleteById(id=${g.id})}"><button>删除</button></a></td>--> <td><a href="#" th:href="@{/goods/doDeleteById/{doDeleteById}(doDeleteById=${g.id})}"><button>删除</button></a></td> <td><a href="#" th:href="@{/goods/doFindById/{id}(id=${g.id})}"><button>批改</button></a></td></tr>
4.新增商品界面
(1)标签里的name属性要和sql语句统一
(2)这里因为数据库中的id列设置了自增长,所以不须要id属性,createdTime列应用了now()获取以后工夫,所以也不须要传值,所以在管制层的doUpdateGoods办法里能够应用封装好的Goods来接管从html拿到的参数
<form th:action="@{/goods/doSaveGoods}" method="post"> <ul> <li>name:<input type="text" name="name"></li> <li>remark:<textarea rows="3" cols="20" name="remark"></textarea></li> <li><input type="submit" value="Save Goods"></li> </ul></form>
5.批改商品界面
(1)因为id列自增长,所以批改商品信息不须要id这一列,但传参数有须要一起传送过来,所以增加了一个输入框,默认设置为暗藏,将其value设置为id的值
<form th:action="@{/goods/doUpdateGoods}" method="post"> <input type="hidden" name="id" th:value="${goods.id}"> <ul> <li>name:<input type="text" name="name" th:value="${goods.name}"></li> <li>remark:<textarea rows="3" cols="20" name="remark" th:text="${goods.remark}"></textarea></li> <li><input type="submit" value="Update Goods"></li> </ul></form>