使用Mybatis工具类进行对数据库的操作-入门

目录

首先使用mybatis需要导入相关的包如下图所示

然后编写配置文件 mybatis-config.xml

紧接着我们看一下我们引入的映射文件

 实体类为

编写的创建sqlsessionfactory类和开启session的工具类 

其他 


Mybatis是针对持久层的java框架 能够自己编写sql语句 通过mapper映射和sqlsession来实现对数据库的操作

首先使用mybatis需要导入相关的包如下图所示

然后编写配置文件 mybatis-config.xml

我是根据mbatis文档中给出的模板进行编写的

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <typeAliases>
        <!-- 这里是取别名 不起也行但是在上下文中只能用限定名代替 -->
        <typeAlias type="com.xin.pojo.User" alias="user"/>
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!-- 配置驱动和数据库信息 -->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                    <!-- 要连接的数据库 -->
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis_db"/>
                <property name="username" value="root"/>
                <property name="password" value="123"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!-- 引入映射文件 -->
        <mapper resource="com/xin/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

紧接着我们看一下我们引入的映射文件

定义映射器有两种方式 一种是通过注解 一种是通过xml方式 注解对比较短的sql语句比较方便 但是复杂大型项目还是通过xml配置较好

xml定义映射器分为两个部分:接口和xml文件我们先来看xml文件

这里只写了select和update标签 Mybatis也是通过标签实现不同的数据库增删改查功能的 不同的功能需要设置不同的参数

这里的resultType的值user就是我们在配置文件中定义的别名

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xin.mapper.UserMapper">
    <select id="getUser" parameterType="String" resultType="user">
        select name,password,phonenumber from t_user where name=#{name}
    </select>
    <update id="updateUser" parameterType="user" >
        update t_user set password=#{password},phonenumber=#{phonenumber} where name =#{name}
    </update>
</mapper>

 接口为

import com.xin.pojo.User;

public interface UserMapper {
    //可以通过如下方式添加注解
//@Select("select name,password,phonenumber from t_user where name=#{name}")
    public User getUser(String name);

    public int updateUser(User user);
}

 实体类为

public class User {
    private String name;
    private String password;
    private int phonenumber;
//set,get方法和tostring方法
}

编写的创建sqlsessionfactory类和开启session的工具类 

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class SqlSessionFactoryUtils {
    //通过单例模式构建建 构建方法设置为private使其他类不能通过new来创建它 通过synchronized关键字加锁防止多线程中多次实例化SqkSessionFactory
    private final static Class<SqlSessionFactoryUtils> LOCK = SqlSessionFactoryUtils.class;
    private static SqlSessionFactory sqlSessionFactory = null;

    private SqlSessionFactoryUtils() {
    }

    public static SqlSessionFactory getSqlSessionFactory() {
        synchronized (LOCK) {
            if (sqlSessionFactory != null) {
                return sqlSessionFactory;
            }
            String resource = "mybatis-config.xml";//配置文件路径
            InputStream inputStream;
            try {
                inputStream = Resources.getResourceAsStream(resource);
                //SqlSessionFactoryBuilder是通过构造器模式构建SqlSessionFactory的
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

            } catch (IOException e) {
                e.printStackTrace();
            }
            return sqlSessionFactory;
        }
    }

    public static SqlSession openSqlSession() {
        if (sqlSessionFactory == null) {
            getSqlSessionFactory();
        }
        return sqlSessionFactory.openSession();
    }
}

接下来我们通过main方法测试一下代码 

 

import com.xin.mapper.UserMapper;
import com.xin.pojo.User;
import com.xin.utils.SqlSessionFactoryUtils;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;

public class TestMain {
    public static void main(String[] args) {
        Logger logger = Logger.getLogger(TestMain.class);
        SqlSession sqlSession = null;
        try {
            sqlSession = SqlSessionFactoryUtils.openSqlSession();
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            User user = userMapper.getUser("wang");
            logger.info(user.toString());
            user.setPassword("11111222");
            userMapper.updateUser(user);
            logger.info(user.toString());

        } finally {
            if (sqlSession != null) {
                sqlSession.close();
            }
        }
    }
}

其他 

 log4j.properties的配置如下

log4j.rootLogger=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%p [%t] %C.%M(%L) | %m%n

创建mysql数据库中表的sql语句如下

CREATE TABLE `t_user` (                
          `name` char(20) NOT NULL,            
          `password` char(20) DEFAULT NULL,    
          `phonenumber` int(20) DEFAULT NULL,  
          PRIMARY KEY (`name`)                 
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8   
相关推荐
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页