美文网首页
JavaWeb MyBatis

JavaWeb MyBatis

作者: dawsonenjoy | 来源:发表于2019-04-24 17:31 被阅读0次

    MyBatis是一个操作数据库的ORM框架,在这里一个类对应一个表,类的属性对应表的属性

    使用步骤

    1.编写bean类

    举例:

    public class BeanTest {
        private int id;
        private String name;
        private String pwd;
        public BeanTest(){}
        // 需要有一个无参构造方法
        public BeanTest(int id, String name, String pwd) {
            this.id = id;
            this.name = name;
            this.pwd = pwd;
        }
        ...
        // setter和getter方法
    }
    
    2.配置文件

    需要配置两个文件:conf.xml和mapper.xml

    mapper.xml

    通过在类下的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="com.test.beanMapper">
    <!-- 映射文件路径,文件名不需要后缀 -->
        <select id="testId" resultType="com.test.BeanTest" parameterType="int">
        <!-- select查询语句,返回值类型是BeanTest类,传入参数类型是int -->
            select * from bean where id = #{id}
        </select>
    </mapper>
    
    conf.xml

    主要配置数据库的连接信息(包括:驱动、数据库、用户名和密码),以及加载的映射文件,代码示例如下:

    <?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>
        <!-- environments的default代表当前开发环境,在这个标签下可以配置多个开发环境,
    然后要使用哪个开发环境时就把default的值设置成那个开发环境environment的id即可 -->
        <environments default="development">
            <environment id="development">
                   <transactionManager type="JDBC" />
                    <!-- 使用数据库连接池,也可以设置UNPOOLED从而不使用数据库连接池 -->
                    <dataSource type="POOLED">
                        <!-- 配置数据库信息 -->
                        <property name="driver" value="com.mysql.jdbc.Driver"/>
                        <property name="url" value="jdbc:mysql://localhost:3306/ssm?useSSL=true"/>
                        <!-- 使用旧的jdbc驱动报错,于是使用新的,而在新的驱动里需要设置useSSH值为true -->
                        <property name="username" value="root"/>
                        <property name="password" value="123456"/>
                    </dataSource>
            </environment>
        </environments>
        <mappers>
            <!-- 加载映射文件 -->
            <mapper resource="com/test/beanMapper.xml"/>
        </mappers>
        
    </configuration>
    
    3.使用测试

    首先需要读取conf.xml配置文件,并构建数据库连接,然后在通过找到映射文件下的namaspace,指定语句id(中间用.分隔),然后执行对应语句即可,代码示例:

    import java.io.IOException;
    import java.io.Reader;
    
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    public class Test {
        public static void main(String[] args) throws IOException {
            Reader reader = Resources.getResourceAsReader("conf.xml");
            // 读取conf.xml文件
            SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(reader);
            // 产生一个SqlSession对象用来进行数据库操作
            SqlSession session = ssf.openSession();
            // 打开数据库连接
            String statement = "com.test.beanMapper.testId";
            // 映射文件下的namespace.id对应的sql语句
            BeanTest bt = session.selectOne(statement, 1);
            // 查询语句,只有一个返回值
            System.out.println(bt.getName());
            session.close();
            
        }
    }
    

    数据库操作

    在完成MyBatis映射后,数据库操作只需要在mapper.xml文件中进行编写即可

    mapper.xml中示例:

    <insert id="insertTestId" parameterType="com.test.BeanTest">
    <!-- 插入一个对象 -->
        insert into bean(id, name, pwd) values(#{id}, #{name}, #{pwd})
    </insert>
    

    测试示例:

    public static void main(String[] args) throws IOException {
        Reader reader = Resources.getResourceAsReader("conf.xml");
        SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(reader);
        SqlSession session = ssf.openSession();
        String statement = "com.test.beanMapper.insertTestId";
        BeanTest b = new BeanTest(2, "aaa", "bbb");
        int count = session.insert(statement, b);
        // 返回受影响行数
        session.commit();
        // 需要提交后才会真正写入数据库
        System.out.println(count);
        session.close();
    }
    
    <delete id="deleteTestId" parameterType="com.test.BeanTest">
        delete from bean where id = #{id}
    </delete>
    
    <update id="updateTestId" parameterType="String">
        update bean set pwd = #{xxx}
    </update>
    
    <select id="selectTestId" resultType="com.test.BeanTest">
        select * from bean
    </select>
    

    测试示例:

    ...
    List<BeanTest> lb = session.selectList(statement);
    for(BeanTest bt: lb){
        System.out.println(bt);
    }
    

    映射标签属性

    parameterType

    传入的参数类型,只能有一个属性,所以在sql语句要传入多个参数时,可以设置传入的参数类型为类或者列表等,但传入类时,在sql语句当中的参数名则必须为类中的属性

    resultType

    返回结果类型,和上面同理

    逆向工程

    在Mybatis中,提供了专门的jar包可用于通过表、类、接口和映射文件的其中一个来自动生成其他三个文件

    使用步骤
    1.导入相关jar包

    主要包括:mybatis-generator-coremybatis和jdbc连接的jar包

    2.配置文件

    一般取名为generator.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>
        <context id="DB2Tables" targetRuntime="MyBatis3">
            <commentGenerator>
                <property name="suppressAllComments" value="true" />
                <!-- true代表映射有注释 -->
            </commentGenerator>
    
            <!-- 数据库连接信息 -->
            <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                connectionURL="jdbc:mysql://localhost:3306/ssm?useSSL=true" userId="root"
                password="123456">
            </jdbcConnection>
            <javaTypeResolver>
                <property name="forceBigDecimals" value="false" />
                <!-- 是否需要将表中的DECIMAL和NUMERIC类型转为BigDecimal,false则默认为Integer类型 -->
            </javaTypeResolver>
            <!-- targetProject属性值:实体类的生成位置 targetPackage属性值:实体类所在包的路径 -->
            <javaModelGenerator targetPackage="org.test"
                targetProject=".\src">
                <!-- 生成类文件的位置和包名 -->
                <property name="trimStrings" value="true" />
                <!-- 是否对结果进行trim操作,即删除两边的空格 -->
            </javaModelGenerator>
            <sqlMapGenerator targetPackage="org.test" targetProject=".\src">
                <!-- 生成映射文件的位置和包名 -->
            </sqlMapGenerator>
            <javaClientGenerator type="XMLMAPPER"
                targetPackage="org.test" targetProject=".\src">
                <!-- 生成动态代理的接口的位置和包名,type是生成的接口类型 -->
            </javaClientGenerator>
    
            <!-- 指定数据库表 -->
            <table tableName="bean">
            </table>
        </context>
    </generatorConfiguration>
    
    3.编写执行类
    public static void main(String[] args) throws IOException, XMLParserException, InvalidConfigurationException, SQLException, InterruptedException {  
        File f = new File("./src/generator.xml");
        // 读取配置文件
        List<String> warnings = new ArrayList<String>();
        // 存储警告信息
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = cp.parseConfiguration(f);
        DefaultShellCallback callback = new DefaultShellCallback(true);
        // true为出现新内容时覆盖
        MyBatisGenerator generator = new MyBatisGenerator(config, callback, warnings);
        generator.generate(null);
    }
    

    相关文章

      网友评论

          本文标题:JavaWeb MyBatis

          本文链接:https://www.haomeiwen.com/subject/avswgqtx.html