mybatis-初始簡單配置(XML)
應用mybatis的步驟:
mybatis的入門
依賴配置。操作:
1,新建實體類,類中的屬性和資料庫中的屬性所對應
2,新建dao介面,裡面寫上你需要的方法(比如說返回全部的list集合)。
3,在resource裡面新建XML檔案,名叫SqlMapConfig.xml(mybatis的主配置檔案)
4,配置對映配置檔案,例如IUserDao.xml
環境搭建注意事項:
第一個,建立IUserDao。XML和IUserDao.java名稱是為了保持一致。在mybatis中它把持久層的操作介面和名稱和對映檔案也叫作Mapper,所以,IUserDao和IUserMapper是一樣的
在二個,在idea中建立目錄是和包不一樣。包是:com.demo.dao是三級目錄,而resource目錄是一級的。
第三個,mybatis的對映配置檔案必須和dao介面包結構相同。(同時,對映配置檔名稱和介面名稱必須相同)
第四個,對映配置檔案的mapper標籤namespace屬性取值必須是dao介面的全限命名
第五個,對映配置檔案的操作配置(select),id屬性的取值必須是dao介面的方法名
好處:當我們這樣寫的時候,不需要寫dao實現類了。
SqlMapConfig.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> <!-- 外接屬性配置檔案 ,減少耦合--> <properties resource="mysql.properties"></properties> <!-- 這個包下的實體類自動起別名,為類名,無視大小寫--> <typeAliases> <package name="domain"/> </typeAliases> <!-- 配置資料來源--> <environments default="mysql"> <environment id="mysql"> <transactionManager type="JDBC"></transactionManager> <!-- pooled 連線池--> <dataSource type="POOLED"> <!-- ${key}引用外部properties中的key--> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments> <!-- 介面Mapper檔案的路徑,按包指定--> <mappers> <package name="dao"/> </mappers> </configuration>
起別名和Mapper檔案指定包更具價值。
實體類
public class User implements Serializable {
private Integer id;
private String name;
}
dao介面
public interface IUserDao {
List<User> findAll();
User findById(Integer id);
List<Account> findAccountsByUid(Integer id);
}
Mapper對映檔案
<?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="dao.IUserDao"> <resultMap id="userMap" type="user"> <id property="id" column="id"></id> <result property="name" column="name"></result> </resultMap> <select id="findAll" resultMap="userMap"> select * from users; </select> <select id="findById" resultType="user" parameterType="int"> select * from users where id=#{id} </select> </mapper>
ParameterType表示引數型別。若指定查詢的資料不止一個,例如username和password必須同時符合,最好封裝到物件中,#{property}表示從引數物件中取值,若只是一個值,指定型別即可,property值任意。
resultType:表示返回值型別,指定為一個物件。(只適合於簡單查詢)
resultMap:表示返回型別的對映。(當資料庫的列名稱和物件屬性不一致時,當多表查詢時,必須指定,可重用);
test程式碼:
@Before
public void init() throws IOException {
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
session= factory.openSession(true);
}
@org.junit.Test
public void test() throws IOException {
IUserDao userDao= session.getMapper(IUserDao.class);
List<User> all = userDao.findAll();
for (User user : all) {
System.out.println(user);
System.out.println(user.getAccounts());
}
}
結果:
增刪改,只需要簡單修改Mapper即可。