Mybatis基本配置及 一对一的测试

Mybatis基本配置及 一对一的测试

绿林寻猫
2021-12-08 / 0 评论 / 120 阅读 / 正在检测是否收录...

基本配置

在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&amp;characterEncoding=UTF-8&amp;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>
<!--    &lt;!&ndash;2. 加载映射器:实体类对象/关系映射文件&ndash;&gt; -->
   <!-- <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

评论 (0)

取消