栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

使用MyBatis连接数据库

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用MyBatis连接数据库

目录
  • 一、JDBC和MyBatis的简介和比较
    • 1)MyBatis介绍
    • 2)JDBC问题总结如下
    • 3)Mybatis解决jdbc编程的问题
  • 二、创建项目和配置
    • 1)创建SpringBoot项目
    • 2)创建包和文件(以及文件代码)
  • 三、数据库表的创建
  • 四、结果
  • 五、总结
  • 六、参考链接

一、JDBC和MyBatis的简介和比较 1)MyBatis介绍

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis,实质上Mybatis对ibatis进行一些改进。

MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。

Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。

2)JDBC问题总结如下

1、 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。

2、 Sql语句在代码中硬编码,造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变Java代码。

3、 使用preparedStatement向占有位符号传参数存在硬编码,因为sql语句的where条件不一定,可能多也可能少,修改sql还要修改代码,系统不易维护。

4、 对结果集解析存在硬编码(查询列名),sql变化导致解析代码变化,系统不易维护,如果能将数据库记录封装成pojo对象解析比较方便。

3)Mybatis解决jdbc编程的问题

1、 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。

解决:在SqlMapConfig.xml中配置数据链接池,使用连接池管理数据库链接。

2、 Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。

解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。

3、 向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。

解决:Mybatis自动将java对象映射至sql语句,通过statement中的parameterType定义输入参数的类型。

4、 对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。

解决:Mybatis自动将sql执行结果映射至java对象,通过statement中的resultType定义输出结果的类型。

二、创建项目和配置 1)创建SpringBoot项目

1.打开IDEA,file–>new–>project:

2.选择spring initializr,再next:

3.自主命名,选择java versions为8,再next:

4.点击web,选择spring web:

5.点击SQL,选择三个(如图),再next:

6.输入文件名,选择地址,点击Finnish就创建完成了:

2)创建包和文件(以及文件代码)

1.完整项目可以在我的github上面获取:获取地址

2.创建文件
①在src–>main–>java–>com.mybitis(自动创建的)下,创建四个包分别为:controller、entity、service、mapper,又在包下创建四个java文件:UserController、User、UserMapper(该文件为接口)、UserService。

UserController.java

package com.mybitis.controller;

import com.mybitis.entity.User;
import com.mybitis.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("/getAllUser")
    public List findAll(){
        return userService.findAllUser();
    }

    @RequestMapping("/getUserByUserID/{userid}")
    public List findUserByUserId(@PathVariable int userid){
        return userService.findUserByUserId(userid);
    }
    @RequestMapping("/getUserByUsername/{username}")
    public List findUserByUsername(@PathVariable String username){
        return userService.findUserByUsername(username);
    }

    @RequestMapping("/insertUser")
    public User insertUser(User user){
        return userService.insertUser(user);
    }

    @RequestMapping("/updateUser")
    public int updateUser(User user){
        return userService.updateUser(user);
    }

    @RequestMapping("/deleteUser")
    public int deleteUser(User user){
        return userService.deleteUser(user);
    }


}

User.java

package com.mybitis.entity;

public class User {

        private int userid;
        private String username;
        private String password;

        public int getUserid() {
            return userid;
        }

        public void setUserid(int userid) {
            this.userid = userid;
        }

        public String getUsername() {
            return username;
        }

        public void setUsername(String username) {
            this.username = username;
        }

        public String getPassword() {
            return password;
        }

        public void setPassword(String password) {
            this.password = password;
        }

        @Override
        public String toString() {
            return "User{" +
                    "userid=" + userid +
                    ", username='" + username + ''' +
                    ", password='" + password + ''' +
                    '}';
        }

    }

UserService.java

package com.mybitis.service;

import com.mybitis.entity.User;
import com.mybitis.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
@Service
public class UserService {
    @Autowired(required=false)
    public UserMapper userMapper;

    public List findAllUser(){
        return userMapper.findAllUser();
    }

    public List findUserByUserId(int userid){
        return userMapper.findUserByUserId(userid);
    }
    public List findUserByUsername(String username){
        return userMapper.findUserByUsername(username);
    }

    public User insertUser(User user){
        userMapper.insertUser(user);
        return user;
    }

    public int updateUser(User user){
        return userMapper.updateUser(user);
    }

    public int deleteUser(User user){
        return userMapper.deleteUser(user);
    }



}

UserMapper.java

package com.mybitis.mapper;
import com.mybitis.entity.User;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface UserMapper {
    public List findAllUser();
    public List findUserByUserId(int userid);
    public List findUserByUsername(String username);
    public int insertUser(User user);
    public int updateUser(User user);
    public int deleteUser(User user);
}

②在resources里建一个mapper包,包下建一个与上面同名的一个UserMapper的xml文件。

UserMapper.xml




    
        
        
        
    

    
        select * from user where userid=#{userid};