基本配置
在pom.xml中引入依赖
<!--单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!--mybatis依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<!--mysql数据库依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.41</version>
</dependency>
</dependencies> <!--注意:加载src/main/java下所有的xml文件--> <build> <finalName>mybatis_1</finalName> <resources> <resource> <!--指定xml文件所在路径,以下表示src/main/java包下所有的.xml,包括子包--> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> </resources> </build> |
注意:添加上述代码是为了在编译时,将实体包中的映射文件生成到项目下面,否则会报找不到Mapper映射文件的错误。
创建配置文件:db.properties
在resources或src下创建外部配置文件:db.properties
# mysql数据库连接
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
db.user=root
db.pwd=l838061522
创建核心配置文件:mybatis-config.xml
在resources或src下创建核心配置文件:mybatis-config.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="db.properties"></properties>
<settings>
<setting name="lazyLoadingEnabled" value="true"></setting>
<setting name="aggressiveLazyLoading" value="false"></setting>
<setting name="mapUnderscoreToCamelCase" value="true"></setting>
</settings>
<!--1. 配置数据库环境,默认使用development数据库构建环境-->
<environments default="development">
<!--配置环境变量-->
<environment id="development">
<!--配置事务管理器类别-->
<transactionManager type="JDBC" />
<!--配置数据源-->
<dataSource type="POOLED">
<property name="driver" value="${db.driver}" />
<property name="url" value="${db.url}" />
<property name="username" value="${db.user}" />
<property name="password" value="${db.pwd}" />
</dataSource>
</environment>
</environments>
<!-- <!–2. 加载映射器:实体类对象/关系映射文件–> -->
<!-- <mappers> -->
<!-- </mapper>-->
</mappers>
</configuration>
创建表
CREATE TABLE card( c_id INT PRIMARY KEY AUTO_INCREMENT COMMENT "id", code VARCHAR(18) UNIQUE NOT NULL COMMENT "身份证号码" )COMMENT="身份证表" CREATE TABLE person( p_id INT PRIMARY KEY AUTO_INCREMENT COMMENT "pid", p_name VARCHAR(10) NOT NULL COMMENT "姓名", p_sex VARCHAR(2) NOT NULL COMMENT "性别" CHECK (p_sex="男" OR p_sex="女") , p_age int not null COMMENT "年龄", c_id INT not null COMMENT "card的cid外键", CONSTRAINT FK_CID FOREIGN KEY (c_id) REFERENCES card(c_id) )COMMENT="人员信息表" |
封装类
packageclub.lygangdai.pojo;
importjava.io.Serializable;
/** * @ClassName:card * @Description: TODO(类说明:身份证表 ) * @author Uncle liu * @date 2018-10-11 19:16:13 */ public classCardimplementsSerializable{
private static final longserialVersionUID =1L; privateIntegercId; //id privateStringcode; //身份证号码 //封装属性、构造方法 }
|
packageclub.lygangdai.pojo;
importjava.io.Serializable;
/** * @ClassName:person * @Description: TODO(类说明:人员信息表 ) * @author Uncle liu * @date 2018-10-11 19:16:13 */ public classPersonimplementsSerializable{
private static final longserialVersionUID =1L; privateIntegerpId; //pid privateStringpName; //姓名 privateStringpSex; //性别 privateIntegerpAge; //年龄 privateCardcard;//身份证对象
//封装属性、构造方法 } |
创建接口代理
packageclub.lygangdai.dao;
importclub.lygangdai.pojo.Card; importclub.lygangdai.pojo.Person;
public interfacePersonDao {
/* * @Author Uncle Liu * @Description //TODO 根据id查询Person * @Date 19:17 2018/10/11 * @Param cid * @return Card **/ publicPerson selectPersonById(Integer pid);
/* * @Author Uncle Liu * @Description //TODO 添加Person * @Date 19:19 2018/10/11 * @Param person * @return **/ public voidaddPerson(Person person); /* * @Author Uncle Liu * @Description //TODO 修改Person * @Date 19:58 2018/10/11 * @Param Person * @return **/ public voideditPerson(Person person); /* * @Author Uncle Liu * @Description //TODO 根据id删除Card * @Date 19:59 2018/10/11 * @Param * @return **/ public voiddeletePersonById(Integer pid); } |
packageclub.lygangdai.dao;
importclub.lygangdai.pojo.Card;
public interfaceCardDao {
/* * @Author Uncle Liu * @Description //TODO 根据id查询Card * @Date 19:17 2018/10/11 * @Param cid * @return Card **/ publicCard selectCardById(Integer cid);
/* * @Author Uncle Liu * @Description //TODO 添加Card * @Date 19:19 2018/10/11 * @Param * @return **/ public voidaddCard(Card card); /* * @Author Uncle Liu * @Description //TODO 修改Card * @Date 19:58 2018/10/11 * @Param card * @return **/ public voideditCard(Card card); /* * @Author Uncle Liu * @Description //TODO 根据id删除Card * @Date 19:59 2018/10/11 * @Param * @return **/ public voiddeleteCardById(Integer cid); } |
对象/关系映射 配置*mapper.xml
CardMapper.xml
<?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"> <mappernamespace="club.lygangdai.dao.CardDao"> <selectid="selectCardById"parameterType="Integer"resultType="club.lygangdai.pojo.Card"> SELECT* FROM card WHERE c_id=#{cId} </select> <insertid="addCard"parameterType="club.lygangdai.pojo.Card"keyProperty="cId"useGeneratedKeys="true"keyColumn="c_id"> insert into card(code) values(#{code}) <selectKeykeyProperty="cId"resultType="int"order="AFTER"> SELECT LAST_INSERT_ID() </selectKey> </insert> <deleteid="deleteCardById"parameterType="Integer"> DELETE FROM card WHERE c_id=#{cId} </delete> <updateid="editCard"parameterType="club.lygangdai.pojo.Card"> UPDATE card SET code=#{code} WHERE c_id=#{cId} </update> </mapper> |
PersonMapper.xml
<?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"> <mappernamespace="club.lygangdai.dao.PersonDao"> <!--映射Person对象的resultMap(结果映射集)--> <resultMapid="personMapper"type="club.lygangdai.pojo.Person"> <idproperty="pId"column="p_id"/> <resultproperty="pName"column="p_name"/> <resultproperty="pSex"column="p_sex"/> <resultproperty="pAge"column="p_age"/> <associationproperty="card"column="c_id"select="club.lygangdai.dao.CardDao.selectCardById"></association> </resultMap> <selectid="selectPersonById"parameterType="Integer"resultMap="personMapper"> select* from person where p_id=#{pId} </select>
<insertid="addPerson"parameterType="club.lygangdai.pojo.Person"keyProperty="pId"useGeneratedKeys="true"keyColumn="p_id"> insert into person(p_name,p_sex,p_age,c_id) values(#{pName},#{pSex},#{pAge},#{card.cId}) <selectKeykeyProperty="pId"resultType="int"order="AFTER"> SELECT LAST_INSERT_ID() </selectKey> </insert> <deleteid="deletePersonById"parameterType="Integer"> DELETE FROM person WHERE p_id=#{pId} </delete> <updateid="editPerson"parameterType="club.lygangdai.pojo.Person"> UPDATE person SET p_name=#{pName},p_age=#{pAge},p_sex=#{pSex} WHERE p_id=#{pId} </update> </mapper>
|
在mybatis-config.xml中配置mapper映射文件
<mappers> <mapperresource="club/lygangdai/mapping/PersonMapper.xml"></mapper> <mapperresource="club/lygangdai/mapping/CardMapper.xml"></mapper> </mappers> |
测试
@org.junit.Test public voidtest(){
try{
//通过Resources类加载核心配置文件,得到文件的输入流 InputStream inputStream = Resources.getResourceAsStream("mybatisconfig.xml"); //创建会话工厂,编译配置文件流,获得sqlsessionfactory SqlSessionFactory sqlSessionFactory =newSqlSessionFactoryBuilder().build(inputStream); //通过sqlSessionFactory得到sqlsession对象 SqlSession sqlSession =sqlSessionFactory.openSession(); //一对一 oneTOone(sqlSession); oneTOoneSelect(sqlSession); oneTOoneEdit(sqlSession); oneTOoneDelete(sqlSession); }catch(Exception e){
e.printStackTrace(); }
} ------方法 /* * @Author Uncle Liu * @Description //TODO 一对一添加测试 * @Date 19:34 2018/10/11 * @Param * @return **/ public voidoneTOone(SqlSession sqlSession){
try{
CardDao cardDao = sqlSession.getMapper(CardDao.class); PersonDao personDao = sqlSession.getMapper(PersonDao.class); Card card =newCard(); card.setCode("4305111111111"); //添加完Card,根据配置会把主键值返回给card对象 // <selectKey keyProperty="cId" resultType="int" order="AFTER"> // SELECT LAST_INSERT_ID() // </selectKey> cardDao.addCard(card); System.out.println(card);
Person person =newPerson(); person.setCard(card); person.setPAge(12); person.setPName("张三"); person.setPSex("男"); //添加完Person,根据配置会把主键值返回给person对象 personDao.addPerson(person); System.out.println(person); //提交 sqlSession.commit(); }catch(Exception e){
//回滚 sqlSession.rollback(); System.out.println(e); }finally{
//关闭 sqlSession.close(); } } /* * @Author Uncle Liu * @Description //TODO 一对一查询 * @Date 19:52 2018/10/11 * @Param * @return **/ public voidoneTOoneSelect(SqlSession sqlSession){
PersonDao personDao = sqlSession.getMapper(PersonDao.class); Person person = personDao.selectPersonById(2); System.out.println(person); System.out.println(person.getCard()); } /* * @Author Uncle Liu * @Description //TODO 一对一修改 * @Date 19:52 2018/10/11 * @Param * @return **/ public voidoneTOoneEdit(SqlSession sqlSession){
try{
PersonDao personDao = sqlSession.getMapper(PersonDao.class); Person person = personDao.selectPersonById(2); person.setPName("李四"); personDao.editPerson(person); sqlSession.commit(); }catch(Exception e){
//回滚 sqlSession.rollback(); System.out.println(e); }finally{
//关闭 sqlSession.close(); } } /* * @Author Uncle Liu * @Description //TODO 一对一删除 * @Date 19:52 2018/10/11 * @Param * @return **/ public voidoneTOoneDelete(SqlSession sqlSession){
try{
PersonDao personDao = sqlSession.getMapper(PersonDao.class); Person person = personDao.selectPersonById(2); personDao.deletePersonById(person.getPId());
CardDao cardDao = sqlSession.getMapper(CardDao.class); cardDao.deleteCardById(person.getCard().getCId()); sqlSession.commit(); }catch(Exception e){
//回滚 sqlSession.rollback(); System.out.println(e); }finally{
//关闭 sqlSession.close(); } } |
评论 (0)