mybatis开发之基本流程

一、mybatis介绍

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取

结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)

映射成数据库中的记录。说来说去mybatis本身只是一个数据库的操作工具(框架),他的优点就是通过配置XML文件以及映射的方式来对数据库进行

操作。

二、准备工作

1.首先还是准备一下需要的jar包,mybatis需要jar包合集进行下载。本文使用IDEA开发工具,相较于eclipse本人还是喜欢这个新一点的开发工具,界面

什么的要更养眼一些。

2.首先创建一个javaEE文件

mybatis开发之基本流程_第1张图片

直接下一步,

mybatis开发之基本流程_第2张图片

这一步可以不需要打对号,因为没有用到web内容。紧接着下一步

mybatis开发之基本流程_第3张图片

至此java工程创建完毕,创建以后的工程目录如下

mybatis开发之基本流程_第4张图片

我们需要创建一个lib根目录,创建完成以后,需要对工程结构进行配置,点击快捷工具栏project structure,选择左侧的library如下图,把lib文件夹作为

工程java依赖文件目录。

mybatis开发之基本流程_第5张图片

下一步需要创建一个作为resource文件的根目录,这里面我创建了一个config的目录,作为resource文件目录,如下图修改过程

mybatis开发之基本流程_第6张图片

到此,目录结构就完成了,需要将mybatis需要的所有jar包放到lib文件夹下面。完成以后的工程目录如下图:

mybatis开发之基本流程_第7张图片

三、开始开发

1.首先在config目录下面创建一个sqlmap文件夹,用来存放数据库属性(*.properties)文件以及映射文件(.xml)。

数据库属性配置文件mysql.properties如下

	jdbc.driver=com.mysql.jdbc.Driver
	jdbc.url=jdbc:mysql://127.0.0.1:3306/testdb1
	jdbc.username=root
	jdbc.password=123456

配置一些数据库的基本参数,即数据库地址,使用的账户的用户名,密码。

映射文件取名为user.xml(因为我要操作一个user表),待我们把下一步配置mybatis全局文件配置好以后再来说这个文件。

2.然后在config目录下创建一个XML配置文件,取名SqlMapConfig.xml,这是mybatis框架的全局配置文件,内容如下:





    
    

    
    
        
        
        
    

    
    
        
            
            

            
            
            
            
            
                
                
                
                
            
        
    

    
    
        
        

        
        
    

顺便把log4j.properties文件配置一下(config下创建此文件,目的是使用log),内容如下:

	# Global logging configuration
	log4j.rootLogger=DEBUG, stdout 
	# MyBatis logging configuration...
	log4j.logger.org.mybatis.example.BlogMapper=TRACE 
	# Console output...
	log4j.appender.stdout=org.apache.log4j.ConsoleAppender
	log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
	log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
需要注意的是log4j.rootLogger=DEBUG,测试的时候使用debug生产环境改为error.

3.映射文件的配置(user.xml)

这种方式是普通接口开发方式,即写dao接口和dao的实现类,另一种是mapper代理开发的方式(具体在另一篇博客讲述)






    
    
    
    
    
    
    

    
    

    
    
--     将插入的最后一条数据的主键返回给要插入的对象user中,此方法只对主键自增有效
        
            SELECT LAST_INSERT_ID()
        
        INSERT INTO USER(username,password,sex,address) VALUES (#{username},#{password},#{sex},#{address})
    

    
    
        
        
            
        
        
    

    
    
        DELETE FROM USER WHERE username = #{username}
    

    
    
        DELETE FROM USER WHERE id = #{id}
    

    
    
        UPDATE USER SET username=#{username},password=#{password},sex=#{sex},address=#{address} WHERE id=#{id}
    
对应的user类

public class User {
    private int id;
    private String username;
    private String password;
    private String sex;
    private String address;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    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;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", sex='" + sex + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}
dao接口以及实现类

public interface UserDao {
    /**
     * 根据id查询User表记录
     * @param id
     * @return
     * @throws Exception
     */
    public User findUserById(int id) throws Exception;

    /**
     * 向User表添加记录
     * @param user
     * @throws Exception
     */
    public void insertUser(User user) throws Exception;

    /**
     * 删除user表中的记录
     * @param id
     * @throws Exception
     */
    public void deleteUser(int id) throws Exception;

}
实现类

public class UserDaoImp implements UserDao{
    private final SqlSessionFactory sessionFactory;
    //需要向dao接口实现类中注入SqlSessionFactory,通过构造方法注入

    public UserDaoImp(SqlSessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    @Override
    public User findUserById(int id) throws Exception {
        SqlSession sqlSession = null;
        try {
            sqlSession = sessionFactory.openSession();
            User user = sqlSession.selectOne("test.findUserById",id);
            return user;
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            sqlSession.close();
        }
        return null;
    }

    @Override
    public void insertUser(User user) throws Exception {
        SqlSession sqlSession = null;
        try {
            sqlSession = sessionFactory.openSession();
            sqlSession.insert("test.insertUser",user);
            sqlSession.commit();
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            sqlSession.close();
        }
    }

    @Override
    public void deleteUser(int id) throws Exception {
        SqlSession sqlSession = null;
        try {
            sqlSession = sessionFactory.openSession();
            sqlSession.delete("test.deleteUserById",id);
            sqlSession.commit();
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            sqlSession.close();
        }
    }


}
小结:以上就是对一个user表使用mybatis框架开发的小案例,其中代理接口使用实现类来操作,下一篇紧接着本篇写另外

一种mapper接口,不需要实现类的操作方法.(详情请移步:使用mapper接口开发,无需实现类操作增删改查).


你可能感兴趣的:(JAEE,WEB知识点,mybatis,mysql,持久层框架,idea)