MyBatis实现的三种方式

2020-03-14  本文已影响0人  煗NUAN

MyBatis实现的三种方式

一.纯配置文件式

<?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>
    <!--引入外部配置文件db.properties,连接数据库的时候直接引用db.properties中的key值就可以${driver}...-->
    <properties resource="db.properties" />

    <!--给当前mybatis项目添加日志功能,该STDOUT_LOGGING值的好处是不用添加第三方jar包就可以有日志输出-->
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

    <!--起别名使用package标签可以匹配com.yanm.pojo包下的所有类,并且不区分大小写
        也可使用typeAlias标签匹配指定类型-->
    <typeAliases>
        <package name="com.mybatis.dto" />
    </typeAliases>

    <!--配置mybatis环境变量-->
    <environments default="development">
        <environment id="development">
            <!--配置JDBC事务控制,由mybatis进行管理-->
            <transactionManager type="JDBC"/>
            <!--配置数据源,采用mybatis连接池-->
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${user}"/>
                <property name="password" value="${pass}"/>
            </dataSource>
        </environment>
    </environments>
    <!--加载映射文件-->
    <mappers>
        <!--使用资源的路径-->
        <mapper resource="mybatis1/OrderDTO.xml" />
    </mappers>
</configuration>
driver=org.mariadb.jdbc.Driver
url=jdbc:mariadb://localhost:3306/mall
user=root
pass=root
<?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">
    <!--
        namespace:配置名称空间,对配置的statement进行分类管理
        此时名称可以任意
        当使用Mapper代理时,namespace具有特殊的含义与功能
    -->
<mapper namespace="mybatis1.OrderDTO">

    <select id="getOrderByUid" resultType="OrderDTO">
        select u.uname username,o.oprice orderprice, pa.paytype,d.dcount detailcount,p.pname productname,p.pimg productimgs,
        t.tname typename,i.iname imgname,a.address
        from users u
        inner join orders o on u.uid=o.uid
        inner join pays pa on pa.payid=o.payid
        inner join details d on o.oid=d.oid
        inner join products p on p.pid=d.pid
        inner join types t on t.tid=p.tid
        inner join imgs i on i.pid=p.pid
        inner join address a on a.aid=o.aid
        where u.uid = #{uid};
    </select>
</mapper>
//使用lombok构造Javabean类
@Data  //添加get和set方法
@NoArgsConstructor   //空参构造
@AllArgsConstructor  //全参构造
public class OrderDTO {
    private String username;
    private String orderprice;
    private String paytype;
    private String detailcount;
    private String productname;
    private String productimgs;
    private String typename;
    private String imgname;
    private String address;
}

public class DTOTest {
    private SqlSessionFactory ssf=null;
    private SqlSession ss=null;

    @Before
    public void beforeSQL(){
        try {
            ssf=new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis.xml"));
            ss=ssf.openSession(true);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @After
    public void afterSQL(){
        if (ss!=null){
            ss.close();
            ss=null;
        }
    }

    @Test
    public void testDTO(){
        List<OrderDTO> orderDTOs = ss.selectList("mybatis1.OrderDTO.getOrderByUid",1);
        for (OrderDTO orderDTO : orderDTOs) {
            System.out.println(orderDTO.toString());
        }
    }
}

二.配置xx.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>
    <!--引入外部配置文件db.properties,连接数据库的时候直接引用db.properties中的key值就可以${driver}...-->
    <properties resource="db.properties" />
    
    <!--起别名使用package标签可以匹配com.yanm.pojo包下的所有类,并且不区分大小写
        也可使用typeAlias标签匹配指定类型-->
    <typeAliases>
        <package name="com.mybatis.pojo" />
    </typeAliases>

    <!--配置mybatis环境变量-->
    <environments default="development">
        <environment id="development">
            <!--配置JDBC事务控制,由mybatis进行管理-->
            <transactionManager type="JDBC"/>
            <!--配置数据源,采用mybatis连接池-->
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${user}"/>
                <property name="password" value="${pass}"/>
            </dataSource>
        </environment>
    </environments>
    <!--加载映射文件-->
    <mappers>
        <!--使用资源的路径-->
        <mapper resource="dao/IUserDao.xml" />
    </mappers>
</configuration>
driver=org.mariadb.jdbc.Driver
url=jdbc:mariadb://localhost:3306/mall
user=root
pass=root
<?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="com.mybatis.dao.IUserDao">
    <!--
    第二种实现mybatis的方式为:接口+xml方式
    这种方式有特别的要求
        1.  namespace必须是接口的全路径
        2.  每个节点的id必须是接口中的方法名
        3.  该接口中的方法不允许重载,否则namespace+id将不唯一
        4.  注意该接口中的增删改的方法的返回值,最好使用int
-->

    <select id="getAllUsers" resultType="Users">
        select * from users
    </select>

    <select id="getUsersById" resultType="Users">
        select * from users where uid=#{uid}
    </select>

    <delete id="deleteUser">
        delete from users where uid=#{uid}
    </delete>

    <insert id="saveUser">
        insert into users values(DEFAULT,#{uname},#{upass},#{uphone},#{oid})
    </insert>

    <update id="updateUser">
        update users set uname=#{uname},upass=#{upass} where uid=#{uid}
    </update>

</mapper>
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Users {
    private int uid;
    private String uname;
    private String upass;
    private String uphone;
    private int oid;
}

public interface IUserDao {

    //获取用户信息
    List<Users> getAllUsers();

    //根据id获取用户信息
    Users getUsersById(int uid);

    //删除用户
    int deleteUser(int uid);

    //新增用户
    int saveUser(Users users);

    //修改用户信息
    int updateUser(Users users);
}

public class MybatisTest {

    private SqlSession ss=null;

    @Before
    public void beforeSQL(){
        ss= SessionUtils.getSqlSession(); //调用工具类
    }

    @After
    public void afterSQL(){
        SessionUtils.SqlSessionClose(ss);  //调用工具类
    }

    @Test
    public void getAllUser(){
        IUserDao dao=ss.getMapper(IUserDao.class);
        List<Users> list=dao.getAllUsers();
        for (Users users : list) {
            System.out.println(users);
        }
    }

    @Test
    public void getUsersById(){
        IUserDao dao=ss.getMapper(IUserDao.class);

        Users user = dao.getUsersById(1);
        System.out.println(user);
    }

    @Test
    public void deleteUser(){
        IUserDao dao=ss.getMapper(IUserDao.class);

        int i = dao.deleteUser(11);
        System.out.println(i);
    }

    @Test
    public void saveUser(){
        IUserDao dao=ss.getMapper(IUserDao.class);
        Users users=new Users(0,"nihoa","nihao","12345678901",1);
        int i = dao.saveUser(users);
        System.out.println(i);
    }

    @Test
    public void updateUser(){
        IUserDao dao=ss.getMapper(IUserDao.class);

        Users users=new Users();
        users.setUid(4);
        users.setUname("甄宓");
        users.setUpass("zhenfu");
        int i = dao.updateUser(users);
        System.out.println(i);
    }
}

public class SessionUtils {
    private static SqlSessionFactory ssf=null;
    private static SqlSession ss=null;

    static {
        try {
            ssf=new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis.xml"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //获取SqlSession对象
    public static SqlSession getSqlSession(){
        ss=ssf.openSession(true);
        return ss;
    }

    //关闭SqlSession对象
    public static void SqlSessionClose(SqlSession s){
        if (s!=null){
            s.close();
            s=null;
        }
    }
}

三.纯注解式

<?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>
    <!--引入外部配置文件db.properties-->
    <properties resource="db.properties" />

    <!--起别名使用package标签可以匹配com.mybatis.pojo包下的所有类,并且不区分大小写
        也可使用typeAlias标签匹配指定类型-->
    <typeAliases>
        <package name="com.mybatis.pojo" />
    </typeAliases>

    <!--配置mybatis环境变量-->
    <environments default="development">
        <environment id="development">
            <!--配置JDBC事务控制,由mybatis进行管理-->
            <transactionManager type="JDBC"/>
            <!--配置数据源,采用mybatis连接池-->
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${user}"/>
                <property name="password" value="${pass}"/>
            </dataSource>
        </environment>
    </environments>
    <!--加载映射文件-->
    <mappers>
        <!--使用资源的路径,匹配com.mybatis.dao包下的所有接口-->
        <package name="com.mybatis.dao"/>
    </mappers>
</configuration>

driver=org.mariadb.jdbc.Driver
url=jdbc:mariadb://localhost:3306/mall
user=root
pass=root

public interface IUserDao {

    //获取用户信息
    @Select("select * from users")
    List<Users> getAllUsers();

    //查询指定字段
    @Select("select * from users where uname=#{param1} and upass=#{param2}")
    //或者 : 
    // @Select("select * from users where uname=#{arg0} and upass=#{arg2}")
    Users getUserAndPassword(String uname,String upass);

    /**
     *   或者 :
     *      @Select("select * from users where uname=#{uname} and upass=#{upass}")
     *      Users getUserAndPassword(@Param("uname")String uname,@Param("upass")String upass);
    */


    //查询用户
    @Select("select * from users where uid=#{aaa}")
    Users getUserById(int uid);

    //添加用户
    @Insert("insert into users values(default,#{uname},#{upass},#{uphone},#{oid})")
    int saveUser(Users users);

    //删除用户
    @Delete ("delete from users where uid=#{uid}")
    int deleteUserById(int uid);


    //根据id修改信息
    @Update("update users set uname=#{uname},upass=#{upass} where uid=#{uid}")
    int updateUserById(Users users);
}

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Users {
    private int uid;
    private String uname;
    private String upass;
    private String uphone;
    private int oid;
}

public class MybatisTest {

    private SqlSession ss=null;
    @Before
    public void beforeSQL(){
        ss= SessionUtils.getSqlSession();
    }
    @After
    public void afterSQL(){
        SessionUtils.SqlSessionClose(ss);
    }

    @Test
    public void getAllUsers(){
        IUserDao dao=ss.getMapper(IUserDao.class);
        List<Users> list=dao.getAllUsers();
        for (Users users : list) {
            System.out.println(users);
        }
    }

    @Test
    public void loginTest(){
        IUserDao dao=ss.getMapper(IUserDao.class);
        Users users=dao.getUserAndPassword("大乔","daqiao");
        System.out.println(users);
    }


    @Test
    public void getUserById(){
        IUserDao dao=ss.getMapper(IUserDao.class);
        Users users=dao.getUserById(2);
        System.out.println(users);
    }

    @Test
    public void saveUser(){
        IUserDao dao=ss.getMapper(IUserDao.class);
        int i=dao.saveUser(new Users(0,"你好","nihao","1234",1));
        System.out.println(i);
    }

    @Test
    public void deleteUserById(){
        IUserDao dao=ss.getMapper(IUserDao.class);
        int i = dao.deleteUserById(4);
        System.out.println(i);
    }

    @Test
    public void updateUserById(){
        IUserDao dao=ss.getMapper(IUserDao.class);
        Users users=new Users();
        users.setUid(12);
        users.setUname("甄宓");
        users.setUpass("zhenfu");
        int i = dao.updateUserById(users);
        System.out.println(i);
    }
}

public class SessionUtils {
    private static SqlSessionFactory ssf=null;
    private static SqlSession ss=null;

    static {
        try {
            ssf=new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis.xml"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //获取SqlSession对象
    public static SqlSession getSqlSession(){
        ss=ssf.openSession(true);
        return ss;
    }

    //关闭SqlSession对象
    public static void SqlSessionClose(SqlSession s){
        if (s!=null){
            s.close();
            s=null;
        }
    }
}

上一篇下一篇

猜你喜欢

热点阅读