博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MyBatis源码分析-IDEA新建MyBatis源码工程
阅读量:5067 次
发布时间:2019-06-12

本文共 5921 字,大约阅读时间需要 19 分钟。

  MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

  下载,导入到IDEA工程(Maven工程)中,工程结构如下:

在pom.xml中新增如下依赖:

mysql
mysql-connector-java
5.1.38
commons-logging
commons-logging
1.2
org.apache.logging.log4j
log4j-api
2.6.2
ognl
ognl
3.1.6
org.slf4j
slf4j-log4j12
1.7.21
cglib
cglib
2.2.2

  等待依赖更新完毕后,如果出现了@Override覆盖接口方法报错问题,请参考。

 

MyBatis配置conf.xml文件

User类的映射文件userMapper.xml

测试代码:

/** * MyBatis测试类 */public class TestMain {    public static void main(String[] args) throws IOException {        String resouce = "conf.xml";        //InputStream is = TestMain.class.getClassLoader().getResourceAsStream(resouce);        InputStream is = Resources.getResourceAsStream(resouce);        // 构建sqlSession工厂        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);        SqlSession session = sqlSessionFactory.openSession();        /**         * 第一种方式: 直接执行已映射的 SQL 语句         */        String statement = "com.luoxn28.dao.UserDao.getById";        User user = session.selectOne(statement, 1);        System.out.println(user);        System.out.println("---------------------");        /**         * 第二种方式: 执行更清晰和类型安全的代码         */        UserDao userDao = session.getMapper(UserDao.class);        user = userDao.getById(1);        System.out.println(user);    }}

User用户类:

/** * User - 用户类 */public class User {    public static final int MAN  = 0;   // 男生    public static final int WOMAN = 1;  // 女生    public static final int OTHER = 2;  // 其他    private int id;             // 用户id    private String name;        // 用户名    private String password;    // 用户密码    private int sex;            // 用户性别    private String email;       // 用户邮箱    private String phone;       // 用户手机    private String admin;       // 用户是否是管理员,"admin"表示是管理员,其他为普通用户    public User() { }    public User(String name, String password, int sex, String email, String phone) {        this.name = name;        this.password = password;        this.sex = sex;        this.email = email;        this.phone = phone;        this.admin = "";    }    public User(String name, String password, String sex, String email, String phone) {        this.name = name;        this.password = password;        setSex(sex); // this.sex = sex;        this.email = email;        this.phone = phone;        this.admin = "";    }    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }    public int getSex() {        return sex;    }    public void setSex(int sex) {        this.sex = sex;    }    public void setSex(String sexStr) {        int sex = Integer.valueOf(sexStr);        switch (Integer.valueOf(sexStr)) {            case 0: {                this.sex = MAN;                break;            }            case 1: {                this.sex = WOMAN;                break;            }            default: {                this.sex = OTHER;                break;            }        }    }    public String getEmail() {        return email;    }    public void setEmail(String email) {        this.email = email;    }    public String getPhone() {        return phone;    }    public void setPhone(String phone) {        this.phone = phone;    }    public String getAdmin() {        return admin;    }    public void setAdmin(String admin) {        this.admin = admin;    }    @Override    public String toString() {        return "User{" +                "id=" + id +                ", name='" + name + '\'' +                ", password='" + password + '\'' +                ", sex=" + sex +                ", email='" + email + '\'' +                ", phone='" + phone + '\'' +                ", admin='" + admin + '\'' +                '}';    }}
User

UserDao用户操作类

/** * UserDao - User操作类 */public interface UserDao {    public User getById(int id);    public List
getAll();}

  以上示例代码是用XML来设置映射语句的,当然,也可以用Java注解来做。比如,上面的 XML 示例可被替换如下:

/** * UserDao - User操作类 */public interface UserDao {    @Select("SELECT * FROM user WHERE id=#{id}")    public User getById(int id);    @Select("SELECT * FROM user")    public List
getAll();}

  使用注解时调用实例:

UserDao userDao = session.getMapper(UserDao.class);user = userDao.getById(1);System.out.println(user);

  对于简单语句来说,注解使代码显得更加简洁,然而 Java 注解对于稍微复杂的语句就会力不从心并且会显得更加混乱。因此,如果你需要做很复杂的事情,那么最好使用 XML 来映射语句。选择何种方式以及映射语句的定义的一致性对你来说有多重要这些完全取决于你和你的团队。换句话说,永远不要拘泥于一种方式,你可以很轻松的在基于注解和 XML 的语句映射方式间自由移植和切换。注意:UserDao接口的getById方法配置了注解,那么就不要XML中配置<select id="getById">xxx</select>了,否则程序会报异常。

 

参考:

  1、

  2、

转载于:https://www.cnblogs.com/luoxn28/p/5922457.html

你可能感兴趣的文章
【深度学习】caffe 中的一些参数介绍
查看>>
Python-Web框架的本质
查看>>
Unrecognized Windows Sockets error: 0: JVM_Bind 异常解决办法
查看>>
QML学习笔记之一
查看>>
7NiuYun云存储UploadPicture
查看>>
Window 的引导过程
查看>>
python与 Ajax跨域请求
查看>>
App右上角数字
查看>>
从.NET中委托写法的演变谈开去(上):委托与匿名方法
查看>>
小算法
查看>>
201521123024 《java程序设计》 第12周学习总结
查看>>
贪吃蛇游戏改进
查看>>
新作《ASP.NET MVC 5框架揭秘》正式出版
查看>>
在WPF中使用Caliburn.Micro搭建MEF插件化开发框架
查看>>
IdentityServer4-用EF配置Client(一)
查看>>
WPF程序加入3D模型
查看>>
WPF中实现多选ComboBox控件
查看>>
读构建之法第四章第十七章有感
查看>>
android访问链接时候报java.net.MalformedURLException: Protocol not found
查看>>
Windows Phone开发(4):框架和页 转:http://blog.csdn.net/tcjiaan/article/details/7263146
查看>>