使用IDEA创建SpringBoot整合Mybatis+Freemarker,实现增删改查

回眸只為那壹抹淺笑 提交于 2019-11-26 12:55:20

使用IDEA创建springboot项目非常简单,比eclipse简单太多,这几天从eclipse换到idea,觉得idea很好很强大! 但是用着各种不习惯,难受~~~,快捷键、自动返回值、一键实现方法、多行的同时编辑,idea的快捷键都不熟悉。。。。  慢慢的熟悉中。

想到使用springboot整合mybatis+freemarker做一个小项目,后续还继续扩展,引入更多的功能等..

  1.    先使用idea创建springboot项目,然后加入mybatis的maven依赖与mysql的jar
  2.                     <!-- springboot,mybatis 整合包 -->
    		<dependency>
    			<groupId>org.mybatis.spring.boot</groupId>
    			<artifactId>mybatis-spring-boot-starter</artifactId>
    			<version>1.3.0</version>
    		</dependency>
    
    		<!-- mysql 驱动包 -->
    		<dependency>    
    			<groupId>mysql</groupId>
    			<artifactId>mysql-connector-java</artifactId>
    		</dependency>

      2. 创建Mybatis的配置文件和mapper配置文件。 

        

3. 书写Controller、service、mapper接口的方法和调用对应的类

   

/**
 * 描述:
 * Controller类,处理请求
 *
 * @author cl
 * @create 2018-06-30 11:02
 */
@Controller
public class TestBootController {


    @Autowired
    private DeptService deptService;

    //主页面的展示
    @RequestMapping("/home")
    public String potal(){
        return "index";
    }


    //添加用户
    @RequestMapping("/saveDept")
    public String save(Dept dept, Model model){
        int i = new Random().nextInt(100);
        dept.setId(i);
        boolean b = deptService.save(dept);
        if(b){
            model.addAttribute("msg","部门添加成功");
            return "/status/success";
        }else{
            model.addAttribute("msg","部门添加失败");
            return "/status/default";
        }
    }

    @RequestMapping("/list")
    public String list(Model model){
        List<Dept> list = deptService.findAll();
        model.addAttribute("deptList",list);
        return "dept_list";
    }

    @PostMapping("/del")
    @ResponseBody
    public boolean delete(Integer id){
            boolean b = deptService.delete(id);
            return b;
    }

    @RequestMapping("/update/{id}")
    public String update(@PathVariable  Integer id,Model model){
           Dept dept = deptService.findById(id);
           model.addAttribute("dept",dept);
           return "updateForm";
    }

    @RequestMapping("/updateDept")
    public String updateDept(Dept dept){
        deptService.update(dept);
        return "redirect:/list";
    }

}

service层:

public interface DeptService {


    boolean save(Dept dept);

    List<Dept> findAll();

    boolean delete(Integer id);

    Dept findById(Integer id);

    void update(Dept dept);
}
@Service
@Transactional
public class DeptServiceImpl implements DeptService{


    @Autowired
    private DeptMapper deptMapper;

    @Override
    public boolean save(Dept dept) {
        try {
            deptMapper.insert(dept);
            return true;
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }
    }

    @Override
    public List<Dept> findAll() {
        List<Dept> list =  deptMapper.findAll();
        return list;
    }

    @Override
    public boolean delete(Integer id) {
        try {
            deptMapper.deleteById(id);
            return true;
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }
    }

    @Override
    public Dept findById(Integer id) {
        return deptMapper.getById(id);
    }

    @Override
    public void update(Dept dept) {
        deptMapper.update(dept);
    }


}

Dao层,也就是Mapper接口:

其中,我在使用idea的时候,将mapper接口向service层注入的时候,出现报错,idea提示,这个注入的mapper接口没有注入到spring中作为bean管理。但是我在eclipse中整合的时候,将mapper接口注入到service层的时候,没有报错,并且可以正常运行,查阅资料,有的说 是idea的验证比eclipse严格,所以报错。我在mapper接口上加入了注解@Repository注解,将该接口加入到spring中管理,程序就不报错,并且可以正常运行,并且使用@Component 注解也是可以的,但是意义上来说Dao层应该使用@Repository注解 将mapper接口管理到spring中。

//加上注解,将mapper接口注入到spring中
@Repository
@Mapper
public interface DeptMapper {


    public void insert(Dept dept);

    public Dept getById(Integer id);

    public void update(Dept dept);

    public void deleteById(Integer id);

    public List<Dept> findAll();
}

4.在将数据传入到前端页面的时候,由于springboot默认不支持jsp,所以使用freemarker模板作为页面数据的展示,还可以使用thymeleaf模板。

 其中在使用js的时候,遇到的坑有很多,简直了!! 

在引入jQuery文件的时候,其路径是默认的从static下面开始计算,所以只需要从static开始写路径即可! 

如果/js  则表示从根路径开始计算,如果js前面灭有/  则表示从当前的路径开始计算引用的路径。

并且在写ajax方法的时候,写的是删除的方法,定义函数为 function delete(){}

死活不能执行该fucntion,以为是freemarker中不能定义js代码,只能写一个js文件,然后在模板中引入该js文件,这样就可以执行,因为我改变了函数名,将delete改为del,就可以执行!!!

坑,freemarker中是可以写js代码,因为我定义的方法名称 delete  这个变量是javascript中的关键字,所以该方法不能执行!!!   

javascript中的关键字:break delete function return typeof  
                                         case do if switch var  
                                         catch else in this void  
                                         continue false instanceof throw while  
                                         debugger finally new true with  

                                         default for null try   

Javascript未来关键字(Javascript Future Reserved Words)  

src="/js/jquery-1.11.3.min.js" 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>List</title>
    <script type="text/javascript"  src="/js/jquery-1.11.3.min.js"></script>
    <#--<script type="text/javascript"  src="/js/del.js"></script>-->
    <script>
        function del(id){
            alert(id);

            $.post(
                "/del", //调用的方法
                {"id" : id}, //传递参数,
                function(data){
                    if(data){
                        alert("删除成功")
                    }else{
                        alert("删除失败")
                    }
                },
                "json"
            );
        }

    </script>

</head>
<body>

    <table>
        <tr>
            <th>序号</th>
            <th>姓名</th>
            <th>年龄</th>
        </tr>
        <#list deptList as dept>
            <tr>
                <td>${dept_index}</td>
                <td>${dept.name}</td>
                <td>${dept.desc}</td>
            </tr>
            <tr>
                <td>
                    <a href="/update/${dept.id}">修改</a>
                </td>
                <td>
                    <button οnclick="del('${dept.id}')">删除</button>
                </td>
            </tr>
        </#list>

    </table>
</body>
</html>

整合mybatis和freemarker的小demo。

 后续 搭建redis,然后加入redis到demo中 并且也可以整合ehcache...




易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!