マッパーインターフェースの開発方法は、インタフェース定義に従って動的プロキシオブジェクトインターフェイスMyBatisのフレーム、プロキシオブジェクトクラスのメソッドのダオ・インターフェースの上部部材と同様の方法で作成されたマッパーインターフェース(DAOに対応するインターフェース)を、書くためにプログラマを必要とします。
ディレクトリ構造:
XMLの道
作成手順:
Mavenプロジェクト、[OK]を全く何もない、と輸入座標を作成します。
ダオは、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); }
リソースフォルダで、マスター設定ファイルSqlMapConfig.xml MyBatisののを作成します。
リソースフォルダにインポートlog4j.propertiesファイル
パッケージCOM->ベンゾ> DAO内のリソースの作成、マッピングプロファイルIUserDao.xmlを作成します。
要件:
ポジションを作成します:永続層のインタフェースは、同じパッケージになければなりません。
名前:ファイル名が永続層のインタフェース名に名前を付ける必要があり、拡張子が.xmlのある例:注意:名前空間の構成ファイルを耐久性層インタフェース完全なクラス名でなければなりません
、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);
}
}
注意事項:
マッパー:永続層ユーザーインターフェースの名前でそれをMyBatisのとしても知られています。だから、:IUserDaoとIUserMapperは同じです。
時間の観念にディレクトリを作成し、それは同じパッケージではありません。com.ben.daoはディレクトリです:;:あなたは、パッケージのパッケージを作成するときにディレクトリリストが作成されたときに、それは三次構造であるcom.ben.dao。
マッパーIUserDao.xmlタグ設定のマッピング設定ファイル:
名前空間:完全修飾クラス名のDAOインタフェース。例えばcom.ben.dao.IUserDao
ID:マッパーインターフェース(IUserDao)インタフェースのメソッド名。
ParameterType:受信パラメータ型インターフェース方法。
resultType:接口方法的返回值类型;
遵从了第3点,在开发中就无须再写dao的实现类。mybatis 为我们实现,即为动态代理dao实现。
注解方式
IUserDao.xml移除;
dao接口(IUserDao)的方法上使用@Select注解,并且指定SQL语句;
public interface IUserDao { //用户的持久层操作,查询所有操作。 @Select("select * from user") List<User> findAll(); }
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);
}
}
}