mybatis入门学习(一)

一:原生态jdbc程序中问题总结

原生态jdbc代码:

public class jdbcTest {
    public static void main(String[] args){
        //数据库的连接
        Connection connection=null;
        //预编译的Statement
        PreparedStatement ps=null;
        //结果集
        ResultSet rs=null;

        try{
            //加载数据库驱动
            Class.forName("com.mysql.jdbc.Driver");

            //通过驱动获取数据库连接
            connection= DriverManager.getConnection("jsbc:mysql://localhost:3306/mybatis");

            //定义sql语句
            String sql="select * from user where username=?";
            //获取预处理
            ps=connection.prepareStatement(sql);
            //设置参数,第一个参数为sql语句中参数的序号
            ps.setString(1,"xiaowang");
            //向数据库发出SQL执行查询,查询出结果集
            rs=ps.executeQuery();
            //遍历结果集
            while(rs.next()){
                System.out.println(rs.getString("id")+" "+rs.getString("username"));
            }
        }catch(ClassNotFoundException e){
            e.printStackTrace();
        }catch (SQLException e){
            e.printStackTrace();
        }finally {
            if(rs!=null){
                try{
                    rs.close();
                }catch (SQLException e){
                    e.printStackTrace();
                }
            }
            if(ps!=null){
                try{
                    ps.close();
                }catch (SQLException e){
                    e.printStackTrace();
                }
            }
            if(connection!=null){
                try {
                    connection.close();
                }catch (SQLException e){
                    e.printStackTrace();
                }
            }
        }
    }
}

 问题总结:

    1):数据库连接,使用时就创建,不适用就立即释放,对数据库进行频繁连接开启和关闭,造成对数据库资源的浪费,影响数据库的性能

        设想:使用数据库连接池管理数据库的连接

    2):将SQL语句硬编码到ava代码中,如果sql语句修改,需要重新编译java代码,不利于系统的维护

        设想:将sql语句配置在XML文件中

    3):向preparedStatement中设置参数,对占位符位置和设置参数值,硬编码在java代码中

        设想:将sql语句及占位符和参数值配置在xml中

    4):在rs结果集中遍历时存在硬编码

        设想:将查询的结果集,自动的映射成java对象

二:mybatis是什么

    mybatis是一个持久层框架,是Apache下的顶级项目

    mybatis让程序将主要的精力放在SQL上,通过mybatis提供的映射方式,自由灵活生成满足要求的SQL语句

三:mybatis框架

    1):SqlMapConfig.xml(是mybatis的全局配置文件,配置了数据源,事务等mybatis运行环境)

    2):SqlSessionFactory(会话工厂):创建SQLSession

    3):SqlSession(会话):操作数据库

    4):executor(执行器):sqlSession内部是通过执行器来操作数据库

    5):mapped Statement(底层封装对象):对操作数据库存储封装,包括sql语句,输入,输出对象等

流程为:1)->2)->3)->4)->5)->数据库

四:环境准备

    1):创建java程序

    2):加入jar包

            mybatis-3.4.6jar 和mysql-connector-java-5.1.46.jar

    3):log4j.properties

#Global logging configuration
log4j.rootLogger=DEBUG,stdout
#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  

    4):配置sqlMapConfig.xml(名字可以任意命名)文件

<configuration>
    <!--和spring整合后environment配置将废除-->
    <environments default="development">
        <environment id="development">
            <!--使用jdbc事务管理-->
            <transactionManager type="JDBC"></transactionManager>
            <!--数据库连接池,由mybatis管理-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"></property>
                <property name="url" value="jdbc://mysql:///mybatis"></property>
                <property name="username" value="root"></property>
                <property name="password" value="root"></property>
            </dataSource>
        </environment>
    </environments>
</configuration>

 5):编写sql语句  

<!--namespace命名空间,作用是对sql进行分类化管理-->
<mapper namespace="test">
    <!--在映射文件中配置很多sql语句-->
    <!--通过select执行数据库查询
    id:表示映射文件中的SQL,称为statement的id,将sql语句封装到mappedStatement对象中-->

    <select id="findUserById" parameterType="int" resultType="main.test.User">
        SELECT * from user where id=#{id}
    </select>
</mapper>

    6):在SqlMapConfig.xml文件中加载xml文件

    <!--加载映射文件-->
    <mappers>
        <mapper resource="User.xml"/>
    </mappers>

    7):编写测试类

    //根据id查询用户信息,得到一条查询语句
    @Test
    public void findUserById() throws IOException{
        //mybatis配置文件
        String resource= "src/main/config/SqlMapConfig.xml";
        //得到配置文件流
        InputStream inputStream=Resources.getResourceAsStream(resource);
        //创建会话工厂,传入mybatis的配置文件信息
        SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
        //通过工厂得到SQLSession
        SqlSession sqlSession=sqlSessionFactory.openSession();
        //通过SQLSession操作数据库

        User user=sqlSession.selectOne("test.findUserById",1);
        System.out.println(user.getUsername());

        //释放资源
        sqlSession.close();
    }
}

猜你喜欢

转载自blog.csdn.net/phoenix_tgd/article/details/80023393