Maven框架实现对数据库的增删改查步骤:一、搭maven框架:具体过程参照黄少威同学的文档。二、实现方法:当maven框架搭建完成后,很多方法都是封装好的,我们不需要去改动。当我们要实现增删改查功能时,只需要添加某些代码,可以直接调用这些方法。步骤:①在cn.gov.mnhr.modules.bean包下创建一个实体类,这个类表示你的数据库里面对应的表,类中的变量代表数据库中表的属性值。例如我写的School类:从上到下:a.@Entity//告诉Spring这是一个实体类,方便Spring管理@Table(name=tb_school)//name为数据库中表的名字b.Shool类继承一个IdModel方法:这样我们不用手动的输入id,当我们增加一个用户时,会自动在数据库中生成id;c.定义变量名,并得到每个变量Set/get方法。②当我们写完School类时,我们不需要去数据库里建表,只要运行src/test/java里的服务器QuickStartServer就会自动在数据库里面建表。但是前提是你数据库要要配置正确,查看数据库的配置文件:src/main/resourceapplication.properties,数据库名、数据库密码都要正确。③在cn.gov.mnhr.modules.dao包下创建数据库的交互:创建一个Dao类。例如我创建的SchoolDao.java:a.创建SchoolDaoCustom接口,继承BaseDaoSchool(BaseDaoT是封装好的一个接口,T为你所创建的实体);b.创建SchoolDao接口,继承SchoolDaoCustom和CrudRepositorySchool,String类;(SchoolDao是要被其他类调用的,因此要在创建接口时加上public)CrudRepositoryT,ID,T是领域实体,ID是领域实体的主键类型。CrudRepository实现了相应的增删改查方法。c.创建SchoolDaoImpl实现类,来实现SchoolDaoCustom。(有接口就要有实现方法)(@Repository持久层组件,用于标注数据访问组件,即DAO组件)④在cn.gov.mnhr.modules.service包下处理业务逻辑:a.创建一个Service接口,在接口中定义增删改查的方法。例如SchoolService:这里的方法是可以自己定义的,你需要用到什么方法就可以定义什么样的,但是有一点需要注意的,就是你的方法返回的值的类型,有些方法不需要返回值,有些方法返回值不一样。例如:上面的publicvoidsave(Schoolschool);这个方法是向数据库增加一条信息,没有返回前台,因此不需要返回的值,所以定义void的类型;publicSchoolgetById(Stringid);这个方法是通过id来找到一条记录,因此返回的是School类型。b.既然我们已经创建了一个Service接口,接下来我们要对接口进行实现,在cn.gov.mnhr.modules.service.impl包下,我们要新建一个ServiceImpl的类来实现Service接口中的方法。例如SchoolServiceImpl:从上到下:@Service(schoolServiceImpl):告诉Spring容器schoolServiceImpl是一个接口实现类。@Transactional:声明这个ServiceImpl所有方法需要事务管理。每一个业务方法开始时都会打开一个事务。@Autowired:这个注解Spring可以自动帮你把bean里面引用的setter/getter方法省略,他会自动帮你set/get。这样你在实现类中只要声明SchooDao类型就可以,而不需要使用SchoolDaoschoolDao=newSchoolDao();@Override:这个注解表示对父类的重载,覆盖了父类里面的方法。在SchoolServiceImpl类中,要实现SchoolService里面的方法,要调用SchoolDao里面的方法。schoolDao.save(school);这样就会自动将school对象保存在数据库中。⑤接下来要开始写controller类:在cn.gov.mnhr.web包下新建一个Controller类。例如SchoolController.java:从上到下:@Controller(schoolController):告诉Spring这是一个控制层组件。@RequestMapping(school):请求路径,这个类上的路径和类中方法前面的value请求路径就组合成一个完整的请求路.@Resource(name=schoolServiceImpl):会从上下文中查找名称匹配的bean进行装配,找不到就会抛出异常。所以name的值必须与所对映的bean的值保持一致。例如name的值要与@Service(schoolServiceImpl)里面的schoolServiceImpl对应。方法体上面的@RequestMapping(/save),这也是一个请求路径,如果说前面的”school”是一个一级路径的话,那么这个”/list”就相当与二级路径。当我们要查询数据库里的所有信息时:我们可以在浏览器的地址栏输入:。服务器会直接调用/list里面的方法。/save方法、/delete方法:直接调用SchoolService里面的save、delete方法,这样就能实现向数据库保存一条记录,或者删除一条记录,然后returnredirect:list.jhtml;这是重定向,调用/list的方法。/list方法:在这个方法中我们要跳转到/home1这个页面,而且还要把值传到页面上,所以我们用了一个ModelMap的方法,遍历school表后,将表中的全部数据取出来并放到了model中:model.put(school,list);并跳转到/home1页面。/get方法:这个方法是通过id来查找整条记录。,然后再将整条记录返回到update这个页面上,所以我们使用了ModelAndView的方法,model.setViewName(/update),将整条记录带到/update这个页面上。/update方法:这个方法其实是使用了save的方法,通常与/get的方法一起用的,我们通过/get的方法得到了一条记录,并在前台显示出来,这时在前台修改数据,然后再存回数据库。这样就实现了对数据库的修改了。⑥写前台页面:在/demo/src/main/webapp/WEB-INF/views下编写你的前台页面,页面的类型为.ftl。当你写完controller类后,你就应该清楚你需要哪几个页面,例如我需要用到的有home1、和update这两个页面。Home1.ftl:这里是将数据库里面的所有数据查找出来,并输出在页面上。因为我们在Controller中,已经将所有的数据取出来并封装在了school中,因此在这个页面上时,用#listschoolasitem/#list将循环输出school里面的所有数据。这里你需要注意一下,我们在选择修改的时候,有一个链接路径ahref=school/get.jhtml?id=${item.id}修改/a,这个路径是要对应到Controller下的/get方法,而不是/update方法。Home1.ftl:这是要向数据库添加一条记录,需要用到form表单来提交数据,form表单里的action的路径应该对应到Controller里面save的方法。需要注意的是,写方法的路径时,需要用.jhtml为后缀,例如save.jhtml。update.ftl:在这个页面上,我们将通过id取出来的整条记录显示出来,因为我们在Controller里面将整条记录封装到了school中,所以可以通过school.sname的方法将每个数据取出来。我们可以在页面上重新输入新的数据,然后保存。因此这个form表单的action路径应该对应到Controller下的/update方法。三、运行:所有的代码都编写完后,我们要让工程跑起来,首先要先启动服务器:直接运行cn.gov.mnhr.functional.QuickStartServer。当出现以下结果时表明服务器启动成功。然后就可以在浏览器上访问了浏览器访问的路径:访问结果:添加一条记录:结果如下所示:修改某个数据:修改后: