标签:pen rip 获取数据 conf 应该 test select word 技术分享
1 <?xml version="1.0" encoding="UTF-8" ?> 19 <!DOCTYPE configuration 20 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 21 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 22 23 <configuration> 33 <environments default="development"> 34 <environment id="development"> 35 <transactionManager type="JDBC"> 36 <property name="" value=""/> 37 </transactionManager> 38 <!-- 加载驱动和连接 --> 39 <dataSource type="UNPOOLED"> 40 <property name="driver" value="com.mysql.jdbc.Driver"/> 41 <property name="url" value="jdbc:mysql://127.0.0.1:3306/micro_message"/> 42 <property name="username" value="xxx"/> 43 <property name="password" value="xxx"/> 44 </dataSource> 45 </environment> 46 </environments> 54 </configuration>
在java代码中读配置文件,读mybatis配置文件的代码应该写在Dao层
对象能与数据库交互
能执行SQL语句
Mybatis中向Dao层提供对象的名字叫做SqlSession(核心对象)
向SQL语句传入参数
执行SQL语句
获取执行SQL语句结果的能力
事务的控制
通过配置文件获取数据库连接相关信息
通过配置信息构建SqlSessionFactory
通过SqlSessionFactory打开数据库会话
1 /** 2 * 访问数据库类 3 */ 4 public class DBAccess { 5 /** 6 * 7 * @return 8 * @throws IOException 出现异常先往外抛,抛给DAO层去处理,因为DAO层需要捕获异常并在finally中关闭拿到的SqlSession 9 * 10 * mybatis的SqlSession也是提供的供数据库的会话,其实是对JDBC的二次封装,因此拿到数据后也是需要关闭的 11 */ 12 public SqlSession getSqlSession() throws IOException { 13 //通过配置文件获取数据库连接信息 路径从src根路径下面开始算起 14 Reader reader = Resources.getResourceAsReader("com/imooc/config/Configuration.xml"); 15 //通过配置信息构建一个SqlSessionFactory 16 SqlSessionFactory SqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); 17 //通过SqlSessionFactory打开一个数据库会话 18 SqlSession sqlSession = SqlSessionFactory.openSession(); 19 return sqlSession; 20 } 21 }
public class MessageDao { /** * 根据查询条件查询消息列表 * @param command * @param description * @return */ public List<Message> queryMessageList(String command,String description) { DBAccess dbAccess = new DBAccess(); SqlSession sqlSession = null; //通过sqlSession执行SQL语句 try { sqlSession = dbAccess.getSqlSession(); } catch (IOException e) { e.printStackTrace(); } finally { sqlSession.close(); } return null; } public static void main(String[] args) { MessageDao messageDao = new MessageDao(); //测试queryMessageList是否能够否文数据库 messageDao.queryMessageList("test","test"); } }
报错信息:Exception in thread "main" java.lang.NullPointerException
原因:在mybatis的配置文件中没有注释掉<mappers>,尚未编写Message.xml
<mappers> <mapper resource="com/imooc/config/sqlxml/Message.xml"/> </mappers>
SQL配置文件的目的:将配置文件中的SQL语句提供给SqlSession,使其能读到并执行.
SQL语句标签的id属性就是给这段SQL语句起了一个名字,以便java代码通过该名称去调用.多个SQL配置文件的id都不能重名.因此可以通过namespace为每一个配置文件起一个不同的名称,因为不同的namespace下相同的id是可以存在的,不会引起冲突.配置文件中的resultMap标签能够配置java对象和数据库字段的映射关系.
将查询条件封装为message对象,将查询条件传入SQL语句中
public List<Message> queryMessageList(String command,String description) { DBAccess dbAccess = new DBAccess(); List<Message> messageList = new ArrayList<Message>(); SqlSession sqlSession = null; try { Message message = new Message(); message.setCommand(command); message.setDescription(description); sqlSession = dbAccess.getSqlSession(); // 通过sqlSession执行SQL语句 messageList = sqlSession.selectList("Message.queryMessageList", message); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if(sqlSession != null) { sqlSession.close(); } } return messageList; }
使用parameterType="com.imooc.bean.Message"指定传入的参数类型,用于接收参数,如果是lang包下面的则可以直接写类型,例如在传递String类型的时候就直接写String,而并非写全路径的类名
<select id="queryMessageList" parameterType="com.imooc.bean.Message" resultMap="MessageResult"> select ID,COMMAND,DESCRIPTION,CONTENT from MESSAGE <where> <if test="command != null and !"".equals(command.trim())"> and COMMAND=#{command} </if> <if test="description != null and !"".equals(description.trim())"> and DESCRIPTION like ‘%‘ #{description} ‘%‘ </if> </where> </select>
OGNL和EL表达式意义相同,在Strusts2和Mybatis中都有用到,在mybatis中OGNL用于从parameterType中取到值并进行处理.不管从哪个标签中进行取值都是取得java类型,所以根据java类型的不同取值写法也有所不同
OGNL的一个强大功能就是不仅能从java对象中去取属性值,而且还可以调用java的方法,本例调用了equals和trim方法
<if test="description != null and!"".equals(description.trim())"> and DESCRIPTION like ‘%‘ #{description} ‘%‘ </if>
标签:pen rip 获取数据 conf 应该 test select word 技术分享
原文地址:https://www.cnblogs.com/dzj0712/p/9424943.html