Mybatisフレームワーク----->(2)詳細なマッピングファイルと構成ファイル

1つは、マッピングファイルを作成する

請求
  1. daoパッケージにStudentDao.xmlファイルを作成します
    ここに画像の説明を挿入
  2. StudentDao.xmlファイル名は、インターフェイスStudentDaoと同じである必要があり、大文字と小文字が区別されます
<?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.StudentDao">
    <select id="selectStudens" resultType="Student">
      select * from student order by id
    </select>
    <!--插入操作-->
    <insert id="insertStudent">
        insert into student values (#{id},#{name},#{email},#{age})
    </insert>
</mapper>
        
  1. 内部のパラメーターを解析します。
  • 名前空間の値:

daoインターフェースの完全修飾名を使用することをお勧めします。ここに com.hcz.dao.StudentDao

  • タグの選択:

クエリ操作を表します。さらに、
更新ラベルはデータベースを更新する操作を表します。
挿入ラベルは挿入操作を表します。
削除ラベルは削除操作を表します。

  • id値:

実行するSQLステートメントの一意の識別子を示します。MybatisはこのIDの値を使用して、実行するSQLステートメントを検索します。カスタマイズできますが、daoインターフェイスでメソッド名を使用する必要があります。インターフェイスここで照会されるメソッド名はselectStudens

  • resultType値:

SQLステートメントの実行後に取得されるResultSetである結果タイプを示し、JavaオブジェクトタイプはResultSetをトラバースすることによって取得されます。その値は完全修飾名を使用する必要があります。com.hcz.dao.Student

  1. jdbcのコードを概算します
<select id="selectStudens" resultType="Student"> 
      select id,name from student 
</select>

次のjdbcコードとほぼ同等

//执行查询,创建记录集
        rs = st.executeQuery("select * from text ");
        while (rs.next()){
    
    
            Student stu = new Student();
            stu.setId(rs.getInt("id"));
            stu.setName(rs.getString("name"));
            //从数据库取出的数据转为Student对象,封装到List集合中
            stuList.add(stu);
        }

2つ目は、構成ファイルを作成することです。

<?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>

    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING" />
    </settings>

    <!--配置mybatis环境:数据库的连接信息-->
    <environments default="mysql">
        <!--id:数据源的名称-->
        <environment id="mysql">
            <!--配置事务类型:使用jdbc事务(使用Connection的提交和回滚)-->
            <transactionManager type="JDBC"/>
            <!--数据源dataSource:创建数据库Connection对象的commit,rollback做事务处理
                type:POOLED使用数据库的连接池
            -->
            <dataSource type="POOLED">
                <!--连接池四要数-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3366/ssm?useUnicode=true&amp;characterEncoding=utf-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    
    <mappers>
        <mapper resource="com/hcz/dao/StudentDao.xml"/>
    </mappers>
</configuration>
  • 設定タグ

mybatis.xmlファイルがログ構成に追加され、実行されたsqlステートメントとパラメーターをコンソールに出力できます。

  • mappersタグ:SQLマッピングファイルの場所


クラスパスのルートから実行されるSQLステートメントの場所をmybatisに伝えますターゲット/クラスクラスパス

3、テストクラスを作成します

public class MyTest {
    
    

    public static void main(String[] args) {
    
    
        //访问mybatis读取student数据
        try {
    
    
            //1.定义mybatis主配置文件,从类路径的根开始(target/classes)
            String config = "mybatis.xml";
            //2.读取配置文件,Resources: mybatis中的一个类, 负责读取主配置文件
            InputStream in = Resources.getResourceAsStream(config );
            //3.创建SqlSessionFactoryBuilder对象 : 创建SqlSessionFactory对象
            SqlSessionFactoryBuilder builder  = new SqlSessionFactoryBuilder();
            //4.创建SqlSessionFactory对象
            SqlSessionFactory factory = builder.build(in);
            //5.获取SqlSession对象,从SqlSessionFactory中获取SqlSession
            /**
             * 1. openSession() :无参数的, 获取是非自动提交事务的SqlSession对象
             * 2. openSession(boolean): openSession(true)  获取自动提交事务的SqlSession.
             *       openSession(false)  非自动提交事务的SqlSession对象
             *
             */
            SqlSession sqlSession = factory.openSession();
            /**
             * SqlSession接口 :定义了操作数据的方法 例如 selectOne() ,selectList() ,
             *                  insert(),update(), delete(), commit(), rollback()
             */
            //6.【重要】指定要执行的SQL语句的标识,sql映射文件中的namespace+"."+标签的id值
            String sqlId = "com.hcz.dao.StudentDao"+"."+"selectStudens";
            //7.【重要】执行SQL语句,通过sqlId找到语句
            List<Student> studentList = sqlSession.selectList(sqlId);
            //8.输出结果
            //studentList.forEach(student -> System.out.println(student));
            for (Student student:studentList){
    
    
                System.out.println(student);
            }
            //9.关闭连接
            sqlSession.close();
        } catch (IOException e) {
    
    
            e.printStackTrace();
        }
    }
}
  • 同等のコード
//6.【重要】指定要执行的SQL语句的标识,sql映射文件中的namespace+"."+标签的id值
String sqlId = "com.hcz.dao.StudentDao"+"."+"selectStudens";
//7.【重要】执行SQL语句,通过sqlId找到语句
List<Student> studentList = sqlSession.selectList(sqlId);

jdbcコードとほぼ同等

Connection conn = 获取连接对象 
String sql=” select id,name,email,age from student” 
PreparedStatement ps = conn.prepareStatement(sql); 
ResultSet rs = ps.executeQuery();

おすすめ

転載: blog.csdn.net/hcz666/article/details/113060786