Mybatis的简单使用

1、首先配置mybatis的配置文件,基本配置如下:

<?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>
    <properties resource="jdbc.properties"></properties>

    <settings>
        <setting name="cacheEnabled" value="true"></setting>
        <setting name="lazyLoadingEnabled" value="true"></setting>
    </settings>
    <typeAliases>
        <package name="mytyperhandler"></package>
    </typeAliases>

    <typeHandlers>
        <package name="test_typeHandler"></package>
    </typeHandlers>
    <objectFactory type="myobjectfactory.MyObjectFactory">
        <property name="someProperty" value="100"></property>
    </objectFactory>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="User-mapper.xml"/>
    </mappers>
    <!--使用注解
    <mappers>
        <package name="mytyperhandler"></package>
    </mappers>
    -->
</configuration>

2、jdbc.properties数据库配置文件

driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/test?useSSL=false&characterEncoding=utf-8
username = root
password = 157382

3、配置User-mapper.xml为映射文件,其代码如下:

<?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="mytyperhandler.UserMapper">

    <insert id="insertUser" parameterType="user">
      insert into users(name,age,hobbys) values(#{name},#{age}, #{hobbys, typeHandler=mytyperhandler.StringArrayByBaseTyperHandler})
  </insert>

    <select id="selectOne" parameterType="int" resultMap="getUser">
        select name,age,hobbys from users where id = #{id}
    </select>
    <resultMap id="getUser" type="user">
        <result property="name" column="name"></result>
        <result property="age" column="age"></result>
        <result property="hobbys" column="hobbys" typeHandler="mytyperhandler.StringArrayByBaseTyperHandler"></result>
    </resultMap>

</mapper>

4、自定义类型转换器,代码如下:

package mytyperhandler;

import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;

import java.sql.*;

public class StringArrayByBaseTyperHandler extends BaseTypeHandler<String[]> {


    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, String[] parameter, JdbcType jdbcType) throws SQLException {
        if(parameter==null){
            ps.setNull(i,Types.VARCHAR);
        }else {
            StringBuilder stringBuilder = new StringBuilder();
            for(String string:parameter){
                stringBuilder.append(string+"_");
            }
            stringBuilder.deleteCharAt(stringBuilder.length()-1);
            ps.setString(i,stringBuilder.toString());
        }
    }

    @Override
    public String[] getNullableResult(ResultSet rs, String columnName) throws SQLException {
        String result = rs.getString(columnName);
        return getStringArrays(result);
    }

    @Override
    public String[] getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        String result = rs.getString(columnIndex);
        return getStringArrays(result);
    }

    @Override
    public String[] getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        String result = cs.getString(columnIndex);
        return getStringArrays(result);
    }

    public String[] getStringArrays(String result){
        return result.split("_");
    }
}

5、自定义ObjectFactory,实现结果的封装返回

package myobjectfactory;

import org.apache.ibatis.reflection.factory.DefaultObjectFactory;
import org.apache.log4j.Logger;

import java.util.List;
import java.util.Properties;

public class MyObjectFactory extends DefaultObjectFactory {
    Logger logger =  Logger.getLogger(MyObjectFactory.class);
    private Object temp = null;
    @Override
    public <T> T create(Class<T> type) {
        T result = super.create(type);
        logger.info("参数type的为"+type);
        logger.info("创建的对象是否相同"+(temp==result));
        return result;
    }

    @Override
    public <T> T create(Class<T> type, List<Class<?>> constructorArgTypes, List<Object> constructorArgs) {

        T result =  super.create(type, constructorArgTypes, constructorArgs);
        logger.info("创建的result对象的类型"+result.getClass().getTypeName());
        temp = result;
        return result;
    }

    @Override
    public void setProperties(Properties properties) {
        logger.info("初始化的参数为:"+properties);
        super.setProperties(properties);
    }

    @Override
    public <T> boolean isCollection(Class<T> type) {
        return super.isCollection(type);
    }
}

6、定义POJO类-User类

package mytyperhandler;

public class User {
    private String name;
    private int age;
    private String[] hobbys;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String[] getHobbys() {
        return hobbys;
    }

    public void setHobbys(String[] hobbys) {
        this.hobbys = hobbys;
    }
}

7、根据Mapper.xml文件构建UserMapper

package mytyperhandler;

import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;

public interface UserMapper {
//    @Insert("insert into users(name,age,hobbys) values(#{name},#{age}, #{hobbys, typeHandler=mytyperhandler.StringArrayByBaseTyperHandler})")
    public void insertUser(User user);
    public User selectOne(int id);
}

8、测试是否可以正常使用

package test_typeHandler;


import com.sun.xml.internal.messaging.saaj.util.ByteOutputStream;
import mytyperhandler.User;
import mytyperhandler.UserMapper;
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.*;
import java.nio.Buffer;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class TestStringTyperHandler {
    public static void main(String[] args) throws IOException, ClassNotFoundException, SQLException {
        InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = build.openSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = new User();
        user.setName("黎明");
        user.setAge(12);
        String[] strings = {"1","2","3"};
        user.setHobbys(strings);
        mapper.insertUser(user);
        sqlSession.commit();

        //获取用户数据
        User user1 = mapper.selectOne(3);
        System.out.println(user1.getName());
        System.out.println(user1.getHobbys().toString());

        sqlSession.close();
        //jdbc链接数据库
//        Class.forName("com.mysql.jdbc.Driver");
//        String url = "jdbc:mysql://localhost:3306/test?characterEncoding=utf-8";
//        Connection root = DriverManager.getConnection(url, "root", "157382");
//
//        System.out.println(root);
//        String sql = "insert into users(id,name,age,hobbys) values (3,'李龙',13,'足球')";
//        PreparedStatement preparedStatement = root.prepareStatement(sql);
//        int i = preparedStatement.executeUpdate();
//        System.out.println(i);


    }

}

9、经测试,是可以使用的Mybatis

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值