CRUDのエージェントベースダオの実装 - (2)MyBatisのエントリーノート

マッパーインターフェースの開発方法は、インタフェース定義に従って動的プロキシオブジェクトインターフェイスMyBatisのフレーム、プロキシオブジェクトクラスのメソッドのダオ・インターフェースの上部部材と同様の方法で作成されたマッパーインターフェース(DAOに対応するインターフェース)を、書くためにプログラマを必要とします。

ディレクトリ構造:

XMLの道

作成手順:

  1. Mavenプロジェクト、[OK]を全く何もない、と輸入座標を作成します。

  2. ダオは、Userエンティティクラスとインタフェースを記述します。

    com.ben.domainパッケージjavaディレクトリを作成、Userエンティティクラスを作成します

    com.ben.daoパッケージの作成、IUserDaoインターフェイスを作成(またUserDaoまたはUserMapper書き込むことができます)

    public interface IUserDao {
        // 通过ID查询一个用户
        User findUserById(Integer id);
        // 根据用户名模糊查询用户列表
        List<User> findUserByUsername(String userName);
        // 添加用户
        int insertUser(User user);
        // 更新用户
        void updateUserById(User user);
        // 删除用户
        void deleteUserById(Integer id);
    }
  3. リソースフォルダで、マスター設定ファイルSqlMapConfig.xml MyBatisののを作成します。

  4. リソースフォルダにインポートlog4j.propertiesファイル

  5. パッケージCOM->ベンゾ> DAO内のリソースの作成、マッピングプロファイルIUserDao.xmlを作成します。

    要件:

    ポジションを作成します:永続層のインタフェースは、同じパッケージになければなりません。

    名前:ファイル名が永続層のインタフェース名に名前を付ける必要があり、拡張子が.xmlのある例:注意:名前空間の構成ファイルを耐久性層インタフェース完全なクラス名でなければなりません



  6. 、Javaで、6つのステップをテストクラスcom.ben.test.MybatisTestを作成します。

1.读取配置文件
in = Resources.getResourceAsStream("SqlMapConfig.xml");
2.创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
3.创建SqlSession工厂对象
SqlSessionFactory factory = builder.build(in);
4.使用工厂生产SqlSession对象
session = factory.openSession();
5.创建Dao接口的代理对象
userdao = session.getMapper(IUserDao.class);
6.执行操作:增删改查等操作
7.释放资源
session.commit();
session.close();
in.close();
/**
 * @ClassName: MybatisTest
 * @author: benjamin
 * @version: 1.0
 * @description: TODO
 * @createTime: 2019/07/07/21:54
 */

public class MybatisTest {

    private SqlSessionFactory factory;
    private IUserDao userdao;
    private InputStream in;
    private SqlSession session;

    // 作用:在测试方法前执行这个方法
    @Before
    public void setUp() throws Exception {
        //1.读取配置文件
        in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2.创建SqlSessionFactory工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        //3.创建SqlSession工厂对象
        SqlSessionFactory factory = builder.build(in);
        //4.使用工厂生产SqlSession对象
        session = factory.openSession();
        //5.创建Dao接口的代理对象
        userdao = session.getMapper(IUserDao.class);
    }

    @After//在测试方法执行完成之后执行
    public void destroy() throws IOException {
        session.commit();
        session.close();
        in.close();
    }


    //通过Id查询一个用户
    @Test
    public void testFindUserById() {
        //5.使用代理对象执行方法
        User user = userdao.findUserById(1);
        System.out.println(user);
    }

    //根据用户名模糊查询用户列表
    @Test
    public void testFindUserByUserName() {
        List<User> list = userdao.findUserByUsername("王");
        for (User user : list) {
            System.out.println(user);
        }
    }

    //添加用户
    @Test
    public void testInsertUser() throws IOException {
        User user = new User();
        user.setUsername("大王");
        user.setBirthday(new Date());
        user.setAddress("sadfsafsafs");
        user.setSex("2");
        int i = userdao.insertUser(user);
        System.out.println("插入id:" + user.getId());//插入id:35
    }

    //更新用户
    @Test
    public void testUpdateUserById() throws IOException {
        User user = new User();
        user.setId(35);
        user.setUsername("一一");
        user.setBirthday(new Date());
        user.setAddress("西安市");
        user.setSex("1");
        userdao.updateUserById(user);

        System.out.println(user.getId());
    }

    //删除用户
    @Test
    public void testDeleteUserById() throws IOException {
        userdao.deleteUserById(29);
    }
}

注意事項:

  1. マッパー:永続層ユーザーインターフェースの名前でそれをMyBatisのとしても知られています。だから、:IUserDaoとIUserMapperは同じです。

  2. 時間の観念にディレクトリを作成し、それは同じパッケージではありません。com.ben.daoはディレクトリです:;:あなたは、パッケージのパッケージを作成するときにディレクトリリストが作成されたときに、それは三次構造であるcom.ben.dao。

  3. マッパーIUserDao.xmlタグ設定のマッピング設定ファイル:

    名前空間:完全修飾クラス名のDAOインタフェース。例えばcom.ben.dao.IUserDao

    ID:マッパーインターフェース(IUserDao)インタフェースのメソッド名。

    ParameterType:受信パラメータ型インターフェース方法。

    resultType:接口方法的返回值类型;

遵从了第3点,在开发中就无须再写dao的实现类。mybatis 为我们实现,即为动态代理dao实现。

注解方式

  1. IUserDao.xml移除;

  2. dao接口(IUserDao)的方法上使用@Select注解,并且指定SQL语句;

    public interface IUserDao {
        //用户的持久层操作,查询所有操作。
        @Select("select * from user")
        List<User> findAll();
    }
  3. SqlMapConfig.xml中的mapper配置时,使用class属性指定dao接口的全限定类名。

<mappers>
  <mapper class="com.ben.dao.IUserDao"/>
</mappers>

编写测试类

/**
 * @ClassName: MybatisTest
 * @author: benjamin
 * @version: 1.0
 * @description: TODO
 * @createTime: 2019/07/07/21:54
 */

public class MybatisTest {

    private SqlSessionFactory factory;
    private IUserDao userdao;
    private InputStream in;
    private SqlSession session;

    // 作用:在测试方法前执行这个方法
    @Before
    public void setUp() throws Exception {
        //1.读取配置文件
        in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2.创建SqlSessionFactory工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        //3.创建SqlSession工厂对象
        SqlSessionFactory factory = builder.build(in);
        //4.使用工厂生产SqlSession对象
        session = factory.openSession();
        //5.创建Dao接口的代理对象
        userdao = session.getMapper(IUserDao.class);
    }

    @After//在测试方法执行完成之后执行
    public void destroy() throws IOException {
        session.commit();
        session.close();
        in.close();
    }

    //查询所有用户
    @Test
    public void findAll(){
        List<User> list = userdao.findAll();
        for (User user : list) {
            System.out.println(user);
        }
    }
}

おすすめ

転載: www.cnblogs.com/benjieqiang/p/11204155.html