标签:curl 手动 typealias 3.4 全局 快速 开发 方式 运行环境
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <properties resource="jdbc.properties"/> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </dataSource> </environment> </environments> <mappers> <mapper resource="com/neuedu/mapper/EmployeeMapper.xml" /> </mappers> </configuration>
- 创建测试用例,.复制mybatis官方文档代码,代码如下:
public class TestMyBatis { @Test public void test() { String resource = "mybatis-config.xml"; InputStream inputStream = null; try { inputStream = Resources.getResourceAsStream(resource);//从配置文件中读取一个流 } catch (IOException e) { e.printStackTrace(); } //利用这个流创建一个sqlSessionFactory对象,也就是总控文件创建了这个对象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //和数据库建立的一次会话,通过openSession,创建一个sqlsession对象 SqlSession sqlsession = sqlSessionFactory.openSession(); try { //selectOne查询一条记录,第一个参数时sql语句的唯一标识,第二个参数时sql要用的参数 //为了确保唯一标识唯一,所以在前面写上namespace,因为namesapce唯一 //如果第二个参数"4"在数据库中找不到的话,不会报错,返回null Object selectOne = sqlsession.selectOne("com.neuedu.MyBatis.EmployeeMapper.selectStudentById",4 ); System.out.println(selectOne); } finally { sqlsession.close(); } } }
- 创建sql语句的映射文件EmployeeMapper.xml;
<mapper namespace="com.neuedu.MyBatis.EmployeeMapper"> <!-- namespace:名称空间,随便起一个名,但是要唯一 id:sql 语句的唯一标识 #{id}:接收参数传递过来的id值 resultType:将 sql语句返回成什么对象 --> <select id="selectStudentById" resultType="com.neuedu.entity.Employee"> select * from student where id = #{id} </select> </mapper>
HelloWorld----接口式编程
public interface EmployeeMapper { /* * 增删改查方法 * */ public Employee getEmployeeById(Integer id); }
- 通过mapper.xml的 namespace 相关联
<mapper namespace="com.neuedu.mapper.EmployeeMapper"> <!-- namespace:将sql映射文件和Mapper接口进行关联 id:要和相对应的mapper接口的方法名保持一致 #{id}:从参数中获取id resultType:将 sql语句返回成什么对象 --> <!-- public Employee getEmployeeById(Integer id); --> <select id="getEmployeeById" resultType="com.neuedu.entity.Employee"> select * from student where id = #{id} </select> </mapper>
- sqlSession 对象表示服务器和数据库的一次会话,是一个非线程安全的,所以不能定义在类中,定义在类中,多线程的情况下会有多个线程共用,一次使用获取一次 ,保证时线程安全的
private SqlSessionFactory getSqlSessionFactory(){ String resource = "mybatis-config.xml"; InputStream inputStream = null; try { inputStream = Resources.getResourceAsStream(resource);//从配置文件中读取一个流 } catch (IOException e) { e.printStackTrace(); } //利用这个流创建一个sqlSessionFactory对象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); return sqlSessionFactory; }
- 测试
@Test public void test01(){ //1.获取sqlSessionFactory对象 SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); //2.利用sqlSessionFactory创建一个session对象,表示和数据库的一次会话 SqlSession session = sqlSessionFactory.openSession(); //3.用session对象获取mapper接口的代理对象 //因为sql映射文件给相应的接口创建了一个代理对象,所以mapper接口类不需要实现类 EmployeeMapper mapper = session.getMapper(EmployeeMapper.class); //通过mapper接口的代理对象就可以对数据库进行增删改查操作 Employee employee = mapper.getEmployeeById(4); System.out.println(employee); session.close(); }
以前都是需要为接口写一个实现类,但是此时,mybatis提供了接口可以与sql配置文件动态绑定!
<!--将接口与xml文件进行绑定 --> EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
<configuration> <!-- mybatis可以使用properties来引入外部properties配置文件的内容 resource:引入类路径下的资源 url:引入网络路径或者磁盘路径下的资源 --> <properties resource="jdbc.properties"></properties> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.user}"/> <property name="password" value="${jdbc.passowrd}"/> </dataSource> </environment> </environments> <!-- 将我们写好的sql映射文件一定要注册到全局配置文件中,文件用/,类用.,也就是如果是class就用.分隔 --> <mappers> <mapper resource="EmployeeMapper.xml"/> </mappers> </configuration>
<!-- settings标签可以设置多个属性值 --> <settings> <!-- setting标签负责每一个属性的设置 --> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings>
<!-- typeAliases可以为多个类起别名 --> <typeAliases> <!-- 别名处理器,可以为某个java类型设置别名 默认是该类名的首字母小写,别名不区分大小写 alias:可以通过该属性单独指定别名--> <!-- <typeAlias type="com.neuedu.entity.Employee" alias="asd"/> --> <!-- 用package可以批量为类起别名 --> <!-- 批量起别名的情况下,使用@Alias注解为某个实体类指定新的别名 --> <package name="com.neuedu.entity"/> </typeAliases>
虽然有这么多的别名可以使用:但是建议还是使用全类名,看SQL语句是怎么被封装为JAVA 对象的时候简单!
<!-- environments:环境们,mybatis可以配置多种环境,default指定使用某种环境。可以达到快速切换环境。 environment:配置一个具体的环境信息;必须有两个标签;id代表当前环境的唯一标识 transactionManager:事务管理器 type:事务管理器的类型;type="[JDBC|MANAGED]"),这两个都是别名,在Configuration类中可以查看具体类!但是Spring对事务的控制才是最终的管理方案! 当然也可以自定义事务管理器:只需要和人家一样实现TransactionFactory接口,type指定为全类名。 dataSource:数据源 type:type="[UNPOOLED|POOLED|JNDI]" 自定义数据源:实现DataSourceFactory接口,type也是全类名 但是我们也说了,无论是事务管理器的配置还是数据源的配置我们都会使用spring来做,这里只需要了解一下即可! --> <environments default="development"> <environment id="test"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.user}"/> <property name="password" value="${jdbc.passowrd}"/> </dataSource> </environment> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.user}"/> <property name="password" value="${jdbc.passowrd}"/> </dataSource> </environment> </environments>
<databaseIdProvider type="DB_VENDOR"> <property name="SQL Server" value="sqlserver"/> <property name="DB2" value="db2"/> <property name="Oracle" value="oracle"/> <property name="MySQL" value="mysql"/> </databaseIdProvider>
<select id="getEmployeeById" resultType="emp"> select * from tbl_employee where id = #{id} </select> <select id="getEmployeeById" resultType="emp" databaseId="mysql"> select * from tbl_employee where id = #{id} </select> <select id="getEmployeeById" resultType="emp" databaseId="oracle"> select * from tbl_employee where id = #{id} </select>
<environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </dataSource> </environment> <environment id="dev_oracle"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </dataSource> </environment> </environments>
8.mapper映射
<!-- mappers:将sql映射注册到全局配置中 --> <mappers> <!-- mapper:注册一个sql映射 注册配置文件: resource:引用类路径下的sql映射文件 mybatis/mapper/EmployeeMapper.xml url:引用网络路径下或者磁盘路径下的sql映射文件 url="file:///var/mappers/AuthorMapper.xml" 注册接口 class:引用(注册)接口: 1.有sql映射文件,映射文件名必须和接口同名,并且放在与接口同一个目录下(可以在conf下见一个同名的包,放在里面); 2.没有sql映射文件,所有的sql都是利用注解写在接口方法上; 推荐: 比较重要的,复杂的Dao接口我们来写sql映射文件 不重要,见到的Dao接口为了开发快速可以使用注解 --> <!-- <mapper class="com.neuedu.mapper.EmployeeMapper"/> --> <mapper resource="com/neuedu/mapper/EmployeeMapper.xml"/> <!-- 批量注册: 对于sql 映射文件和接口需要保证在同一个包下,且名字必须相同 --> <package name="com.neuedu.mapper"/> </mappers>
public interface EmployeeMapper { /* * 增删改查方法 * */ @Select("select * from student where id = #{id}") public Employee getEmployeeById(Integer id); }
public class C3P0DateSource extends UnpooledDataSourceFactory{ public C3P0DateSource() { this.dataSource = new ComboPooledDataSource(); } }
<environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="com.neuedu.datasource.C3P0DateSource"> <property name="driverClass" value="${jdbc.driver}" /> <property name="jdbcUrl" value="${jdbc.url}" /> <property name="user" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </dataSource> </environment> </environments>
标签:curl 手动 typealias 3.4 全局 快速 开发 方式 运行环境
原文地址:http://www.cnblogs.com/lwj-0923/p/7476739.html