首页 > 技术文章 > 如何在IDEA中使用mybatis创建项目并进行增删改查操作

xie-qi 2020-05-13 23:14 原文

1、新建一个项目;

2、导入相关的依赖包;

3、配置mybatis主配置文件,连接信息和mapper位置等;

①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>
    <!--引入jdbc.properties配置文件-->
    <properties resource="jdbc.properties"></properties>
    <!--mybatis设置项-->
    <settings>
        <!--开启日志,将日志信息打印到控制台-->
        <setting name="logImpl" value="STDOUT_LOGGING" />
        <!--开启缓存,默认开启-->
        <setting name="cacheEnabled" value="true"/>
        <!--设置延迟加载-->
        <setting name="lazyLoadingEnabled" value="true"/>
        <!---->
        <setting name="aggressiveLazyLoading" value="false"/>
    </settings>
<!--    配置实体类别名 -->
    <typeAliases>
<!--        配置实体类所在包 -->
        <package name="com.seecen.mybatis3.pojo"/>
    </typeAliases>
    <!---->
    <!--数据库连接池信息-->
    <environments default="oracledb">
        <environment id="oracledb">
            <!--配置事务管理方式,指定为使用jdbc的事务-->
            <transactionManager type="jdbc"></transactionManager>
            <!--指定数据源,type pooled指定为连接池-->
            <dataSource type="pooled">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 配置mapper.xml文件位置 -->
    <mappers>
        <!--指定mapper文件所在包-->
        <package name="com.seecen.mybatis3.mapper"/>
    </mappers>
</configuration>

②连接信息jdbc:properties;

jdbc.driver=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:xe
jdbc.username=sc2001
jdbc.password=sun
#\u9A71\u52A8jar\u5305\u7684\u4F4D\u7F6E,\u5177\u4F53\u7684\u8DEF\u5F84\u3002\u9006\u5411\u751F\u6210\u4EE3\u7801\u65F6\u4F7F\u7528
driverClassPath=C:\\Users\\Administrator\\.m2\\repository\\com\\oracle\\ojdbc6\\11.2.0.3.0\\ojdbc6-11.2.0.3.0.jar

③配置配置文件generatorConfig.xml;

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
<generatorConfiguration>
    <!--加载jdbc.properties配置文件-->
    <properties resource="jdbc.properties" />
    <!--配置驱动jar包的位置-->
    <classPathEntry location="${driverClassPath}" />
    <!--
        context:生成一组对象的环境
        id:必选,上下文id,用于在生成错误时提示
        defaultModelType:指定生成对象的样式
            1,conditional:类似hierarchical;
            2,flat:所有内容(主键,blob)等全部生成在一个对象中;
            3,hierarchical:主键生成一个XXKey对象(key class),Blob等单独生成一个对象,其他简单属性在一个对象中(record class)
        targetRuntime:
            1,MyBatis3:默认的值,生成基于MyBatis3.x以上版本的内容,包括XXXBySample;
            2,MyBatis3Simple:类似MyBatis3,只是不生成XXXBySample;
        introspectedColumnImpl:类全限定名,用于扩展MBG
    -->
    <context id="context1" targetRuntime="MyBatis3">

        <!-- genenat entity时,生成toString -->
        <plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
        <!-- generate entity时,生成serialVersionUID -->
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
        <!--不生成注释-->
        <commentGenerator>
            <property name="suppressAllComments" value="true" />
        </commentGenerator>

        <!--配置数据库连接信息-->
        <jdbcConnection driverClass="${jdbc.driver}"
            connectionURL="${jdbc.url}" userId="${jdbc.username}" password="${jdbc.password}" />
        <!-- java模型创建器,是必须要的元素
            负责:1,key类(见context的defaultModelType);2,java类;3,查询类
            targetPackage:生成的类要放的包,真实的包受enableSubPackages属性控制;
            targetProject:目标项目,指定一个存在的目录下,生成的内容会放到指定目录中,如果目录不存在,MBG不会自动建目录
         -->
        <javaModelGenerator targetPackage="com.seecen.mybatis.pojo"
            targetProject="src/main/java">
            <!-- 设置是否在getter方法中,对String类型字段调用trim()方法 -->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>
        <!-- 生成SQL map的XML文件生成器,
                    注意,在Mybatis3之后,我们可以使用mapper.xml文件+Mapper接口(或者不用mapper接口),
                        或者只使用Mapper接口+Annotation,所以,如果 javaClientGenerator配置中配置了需要生成XML的话,这个元素就必须配置
                    targetPackage/targetProject:同javaModelGenerator
                 -->
        <sqlMapGenerator targetPackage="com.seecen.mybatis.mapper"
            targetProject="src/main/java"></sqlMapGenerator>

        <!-- 对于mybatis来说,即生成Mapper接口,注意,如果没有配置该元素,那么默认不会生成Mapper接口
            targetPackage/targetProject:同javaModelGenerator
            type:选择怎么生成mapper接口(在MyBatis3/MyBatis3Simple下):
                1,ANNOTATEDMAPPER:会生成使用Mapper接口+Annotation的方式创建(SQL生成在annotation中),不会生成对应的XML;
                2,MIXEDMAPPER:使用混合配置,会生成Mapper接口,并适当添加合适的Annotation,但是XML会生成在XML中;
                3,XMLMAPPER:会生成Mapper接口,接口完全依赖XML;
            注意,如果context是MyBatis3Simple:只支持ANNOTATEDMAPPER和XMLMAPPER
        -->
        <javaClientGenerator targetPackage="com.seecen.mybatis.mapper"
            targetProject="src/main/java" type="XMLMAPPER" />

        <table tableName="t_course" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false"
               enableSelectByExample="false" selectByExampleQueryId="false">
        </table>
    </context>
</generatorConfiguration>  

这三个文件放入资源目录下面;

我的目录是这样的,仅供参考:

4、在pojo中创建一个Product.java的实体类文件;

package com.seecen.mybatis3.pojo;

import java.io.Serializable;

public class Product implements Serializable {

    private Integer id;
    private String name;

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    @Override
    public String toString() {
        return "Product{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

 

4、编写Mapper对应的mapper.xml文件和接口,定义接口方法对应的sql语句;

ProductMapper文件和ProductMapper.xml文件:
package com.seecen.mybatis3.mapper;

import com.seecen.mybatis3.pojo.Product;

import java.util.List;

public interface ProductMapper {
    int insert(Product product);
    int deleteById(Integer id);
    int update(Product product);
    Product selectById(Integer id);
    List<Product> selectAll();
}
<?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.seecen.mybatis3.mapper.ProductMapper">

    <insert id="insert" parameterType="Product">
           <selectKey keyProperty="id" order="BEFORE" resultType="integer">
                select p_pro.nextval from dual
           </selectKey>
        insert into Product(id,name) values(#{id},#{name})
    </insert>
    <update id="update" parameterType="Product">
        update Product set name = #{name} where id=#{id}
    </update>
    <delete id="deleteById">
        delete from Product where id=#{id}
    </delete>
    <select id="selectById" parameterType="integer" resultType="Product">
        select * from Product where id=#{id}
    </select>
    <select id="selectAll" resultType="Product">
        select * from Product
    </select>
</mapper>

5、编写dao层访问接口Mapper,用来定义数据库操作方法;

import com.seecen.mybatis3.mapper.ProductMapper;
import com.seecen.mybatis3.pojo.Product;
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 org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;


public class ProductTest {
    @Test
    public void Test() throws IOException {
        InputStream is= Resources.getResourceAsStream("mybatis.xml");
        SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(is);
        SqlSession sqlSession=sqlSessionFactory.openSession();
        ProductMapper mapper=sqlSession.getMapper(ProductMapper.class);
        //插入一条数据
        Product product=new Product();
        product.setName("三只松鼠");
        int count=mapper.insert(product);
        System.out.println("插入记录数:"+count);
        System.out.println(product);
        //删除一条记录
        int count1=mapper.deleteById(1);
        System.out.println(count1);
        //查询一条记录
        Product product1=mapper.selectById(2);
        System.out.println(product1);
        //修改一条记录
        product1.setName("一包薯片");
        int i=mapper.update(product1);
        System.out.println("修改记录数:"+i);
        //查询所有的信息
        List<Product> products=mapper.selectAll();
        for (Product product2:products){
            System.out.println(product2);
        }
        sqlSession.commit();
        sqlSession.close();
        is.close();
    }
}

最后,一定要多注意一些语法的规范或者要试着去查看错误信息,以便更好的修改错误。

 

推荐阅读