二、不使用 XML 构建 SqlSessionFactory

不使用xml构建SqlSessionFactory的话,就要用java代码来连接数据库。我这里直接new DataSorce()接口实现getConnection()方法(不知道对不对,反正实验证明,可行)。

EmployeeDataSourceFactory.java:

 package yyc.mybatis.util;

 import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
import java.util.logging.Logger; import javax.sql.DataSource; public class EmployeeDataSourceFactory { public static DataSource getEmployeeDataSorce(){
DataSource ds=new DataSource() { public <T> T unwrap(Class<T> iface) throws SQLException {
// TODO Auto-generated method stub
return null;
} public boolean isWrapperFor(Class<?> iface) throws SQLException {
// TODO Auto-generated method stub
return false;
} public void setLoginTimeout(int seconds) throws SQLException {
// TODO Auto-generated method stub } public void setLogWriter(PrintWriter out) throws SQLException {
// TODO Auto-generated method stub } public Logger getParentLogger() throws SQLFeatureNotSupportedException {
// TODO Auto-generated method stub
return null;
} public int getLoginTimeout() throws SQLException {
// TODO Auto-generated method stub
return 0;
} public PrintWriter getLogWriter() throws SQLException {
// TODO Auto-generated method stub
return null;
} public Connection getConnection(String username, String password) throws SQLException {
// TODO Auto-generated method stub
return null;
} 57 public Connection getConnection() throws SQLException {
58 try {
59 Class.forName("com.mysql.jdbc.Driver");
60 String url="jdbc:mysql:///mybatis";
61 String user="root";
62 String password="123";
63 Connection connection = DriverManager.getConnection(url, user, password);
64 return connection;
65 } catch (ClassNotFoundException e) {
66 e.printStackTrace();
67 }
68 return null;
69 }
70 };
71 return ds;
}
}

在第一种时,写了一个xml的SQL映射文件(EmployeeMapperXml.xml),现在既然不用xml了,就需要另一种你方式来映射SQL吧,mybatis提供面向接口编程的方式。官方文档中是这样说的:

它们的映射的语句可以不需要用 XML 来做,取而代之的是可以使用 Java 注解。比如:
package org.mybatis.example;
public interface BlogMapper {
@Select("SELECT * FROM blog WHERE id = #{id}")
Blog selectBlog(int id);
}

我这里写一接口:

EmployeeMapper.java:

package yyc.mybatis.mapper;
import org.apache.ibatis.annotations.Select;
import yyc.mybatis.bean.Employee;
public interface EmployeeMapper { @Select("SELECT id,last_name lastName,gender,email FROM tb1_employee WHERE id= #{id}")
public Employee selectOne(Integer id);
}

测试方法(不用xml来得到SqlSessionFactory的方式也不一样):

@Test
public void testJavaConfig(){
DataSource dataSource = EmployeeDataSourceFactory.getEmployeeDataSorce();
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment = new Environment("development", transactionFactory, dataSource);
Configuration configuration = new Configuration(environment);
configuration.addMapper(EmployeeMapper.class);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration); //2.获取sqlSession实例,能直接执行已经映射的sql语句
SqlSession openSession = sqlSessionFactory.openSession(); try {
EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
Employee employee = mapper.selectOne(3);
System.out.println(employee);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
openSession.close();
}
}

输出:

Employee [id=3, lastName=mac, gender=1, email=cc@163.com]

这样就完全脱离了两个xml配置文件实现查询数据库。

初探MyBatis之HelloWorld(二)的更多相关文章

  1. 初探MyBatis之HelloWorld(三)

    三.用SQL映射语句用注解,dataSource用xml(不推荐). 综合上面两节(一个用xml,一个用annotation),发现一个好玩儿的,SQL映射用注解方式,然后还是得有两个xml配置文件. ...

  2. 初探MyBatis之HelloWorld(一)

    官方地址:https://github.com/mybatis/mybatis-3 准备: 官方中文文档地址:http://www.mybatis.org/mybatis-3/zh/getting-s ...

  3. MyBatis学习系列二——增删改查

    目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring 数据库的经典操作:增删改查. 在这一章我们主要说明一下简单的查询和增删改, ...

  4. MyBatis学习 之 二、SQL语句映射文件(2)增删改查、参数、缓存

    目录(?)[-] 二SQL语句映射文件2增删改查参数缓存 select insert updatedelete sql parameters 基本类型参数 Java实体类型参数 Map参数 多参数的实 ...

  5. MyBatis学习 之 二、SQL语句映射文件(1)resultMap

    目录(?)[-] 二SQL语句映射文件1resultMap resultMap idresult constructor association联合 使用select实现联合 使用resultMap实 ...

  6. 【转】MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

    [转]MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作 上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据, ...

  7. mybatis入门系列二之输入与输出参数

    mybatis入门系列二之详解输入与输出参数   基础知识   mybatis规定mapp.xml中每一个SQL语句形式上只能有一个@parameterType和一个@resultType 1. 返回 ...

  8. Mybatis配置信息浅析 MyBatis简介(二)

    官方文档入门篇中有明确说明 每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的. SqlSessionFactory 的实例可以通过 SqlSessionF ...

  9. Mybatis系列(二)配置

    Mybatis系列(二)配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configu ...

随机推荐

  1. [转]JBOSS4.3关于java.lang.OutOfMemoryError: PermGen space解决方法

    vi /jboss/bin/run.bat 找到: set JAVA_OPTS=%JAVA_OPTS% -Xms128m -Xmx512m -XX:MaxPermSize=256m 改为: set J ...

  2. 【BZOJ3124】[Sdoi2013]直径 树形DP(不用结论)

    [BZOJ3124][Sdoi2013]直径 Description 小Q最近学习了一些图论知识.根据课本,有如下定义.树:无回路且连通的无向图,每条边都有正整数的权值来表示其长度.如果一棵树有N个节 ...

  3. 巨蟒python全栈开发django14:Form组件

    1.form组件初识 2.常用字段测试 3.局部钩子和全局钩子 4.简单看源码

  4. Navigation

    Makedown常用语法 1.常用标题 # 代表h1(一级标题) ## 代表h2(二级标题) ### 代表h3(三级标题) #### 代表h4(四级标题) ##### 代表h5(五级标题) ##### ...

  5. 安装VS2013 2015 需要IE10浏览器 跳过的方法

    安装VS2013 如果浏览器版本较旧的话会提示要求你更新到IE10版本,很麻烦,那么我们如何跳过呢? 复制下面代码粘贴到文本文档里,修改文本txt后缀为bat,右键管理员运行. @ECHO OFF   ...

  6. 父标签浮动(float)“塌陷”问题

    浮动“塌陷” float参见: http://www.cnblogs.com/bigtreei/p/8110090.html http://www.w3school.com.cn/css/css_po ...

  7. Python 获取文件路径及文件目录

    import os print (os.path.dirname(__file__)) print (os.path.abspath(__file__)) print (os.path.abspath ...

  8. (2)linux未使用eth0,未使用IPV4导致无法连接

    首先ifconfig查看网络IP 看,我这里默认启用了2个网卡,一个是eth0,另一个是lo(基于loopback方式) 1.如果有eth0则做:界面修改 (1)输入命令setup,选择network ...

  9. 020-Spring Boot 监控和度量

    一.概述 通过配置使用actuator查看监控和度量信息 二.使用 2.1.建立web项目,增加pom <dependency> <groupId>org.springfram ...

  10. make menuconfig 时出现 mixed implicit and normal rules: deprecated syntax

    這是 make 的版本問題!不清楚為何要這樣限制? 將此行          config %config: scripts_basic outputmakefile FORCE改成          ...