<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Latest posts for the topic "17) MentaBeans = Solução ORM simples do Mentawai para CRUD (persistência) de POJOs no BD"]]></title>
		<link>http://forum.mentaframework.org/posts/list/19.page</link>
		<description><![CDATA[Latest messages posted in the topic "17) MentaBeans = Solução ORM simples do Mentawai para CRUD (persistência) de POJOs no BD"]]></description>
		<generator>JForum - http://www.jforum.net</generator>
			<item>
				<title>17) MentaBeans = Solução ORM simples do Mentawai para CRUD (persistência) de POJOs no BD</title>
				<description><![CDATA[ 
O Mentawai agora oferece uma solução simples para persistência de beans (POJOs) em banco de dados. Para fazer o mapeamento Tabela -> Objeto utilizamos <b><u>configuração programática</u> ao invés de XML ou Annotations</b>.

A idéia aqui não é competir com Hibernate, JPA ou iBatis, mas sim oferecer uma solução simples, fácil e eficiente para fazer CRUDs de beans em seus projetos que utilizam o Mentawai.

Acreditamos que em muitos casos simples o MentaBean será um mão na roda para vc persistir os seus Beans sem ter que depender do Hibernate/iBatis/JPA, etc e suas configurações.

Veja como é simples:

<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>

package hello;

public class User {
	
	private int id;
	
	private String name;
	
	private int age;
	
	public User&#40;int id&#41; {
		
		this.id = id;
	}
	
	public int getId&#40;&#41; {
		
		return id;
		
	}
	
	public void setAge&#40;int age&#41; {
		
		this.age = age;
	}
	
	public int getAge&#40;&#41; {
		
		return age;
	}
	
	public void setName&#40;String name&#41; {
		
		this.name = name;
	}
	
	public String getName&#40;&#41; {
		
		return name;
		
	}
}

</pre>
		</div>

<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>

public void init&#40;Context application&#41; {

     ioc&#40;"session", MySQLBeanSession.class&#41;;

public void loadBeans&#40;&#41; {

      bean&#40;hello.User.class, "Users"&#41;
		.pk&#40;"id", DBTypes.AUTOINCREMENT&#41;
		.field&#40;"name", DBTypes.STRING&#41;
		.field&#40;"age", DBTypes.INTEGER&#41;;

       // ou

       BeanConfig bc = new BeanConfig&#40;User.class, "Users"&#41;;
       bc.addField&#40;"id", DBTypes.AUTOINCREMENT, true&#41;; // true = PK
       bc.addField&#40;"name", DBTypes.STRING&#41;;
       bc.addField&#40;"age", DBTypes.INTEGER&#41;;
       addBeanConfig&#40;bc&#41;;
    
	
}
</pre>
		</div>

<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>

public class HelloMentaBean extends BaseAction {

     public String execute&#40;&#41; throws Exception {

          BeanSession session = &#40;BeanSession&#41; input.getValue&#40;"session"&#41;;

          User u = new User&#40;1&#41;;

          if &#40;session.load&#40;u&#41;&#41; {

                System.out.println&#40;"Bean carregado!"&#41;;

          }

          System.out.println&#40;"Username: " + u.getName&#40;&#41;&#41;;

          // update a bean...

          u.setName&#40;"Azenha"&#41;;

          session.update&#40;u&#41;;

          // delete a bean...

          session.delete&#40;u&#41;;

          // inserindo...

          User u = new User&#40;2&#41;;

          u.setAge&#40;19&#41;;

          u.setName&#40;"Pedro"&#41;;

          session.insert&#40;u&#41;;

          return SUCCESS;
     }
}
</pre>
		</div>

Pontos importantes:

 :arrow: Os updates gerados <b>são inteligentes para fazer apenas o update nas colunas que foram alteradas</b>, ou seja, se vc faz o load() de um bean com 20 colunas, altera uma coluna e faz um update(), apenas a coluna alterada sofrerá um update ao invés de todas.

<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>

User u = new User&#40;1&#41;;

session.load&#40;u&#41;; // 100 campos foram carregados aqui...

u.setAge&#40;44&#41;;

session.update&#40;u&#41;; // vai gerar apenas update users set age = ? where id = ? e não um update gigantesco dos 100 campos...

</pre>
		</div>

 :arrow: Se vc deseja fazer um update num registro <b>sem carregá-lo em memória antes</b>, tudo que vc tem que fazer é construir um objeto, não fazer o load, setar os campo que vc deseja fazer o update, e chamar update:

<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>

User u = new User&#40;1&#41;;

// não estamos dando load&#40;&#41; !!!

u.setAge&#40;44&#41;;

session.update&#40;u&#41;; // vai gerar update users set age = ? where id = ?

</pre>
		</div>

 :arrow: Suporta a criação de outros tipos de coluna para o banco de dados, isto é, se vc precisar <b>vc pode criar novos tipos de dados para a inserção</b> no seu bd isso é muito fácil de se fazer:

<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>

public class TimestampType extends DBType {
	
	public TimestampType&#40;&#41; {
		
		super&#40;"MEUTIPO"&#41;;
	}
	
	public Object getFromResultSet&#40;ResultSet rset, int index&#41; throws SQLException {
		
		return '&lt;' + rset.getString&#40;index&#41; + '&gt;';
	}
	
	public Class&lt;? extends Object&gt; getTypeClass&#40;&#41; {
		
		return java.lang.String.class;
	}
	
	public void bindToStmt&#40;PreparedStatement stmt, int index, Object value&#41; throws SQLException {

		if &#40;value instanceof String&#41; {
			
			String s = &#40;String&#41; value;
		
			stmt.setString&#40;index, s&#41;;
			
		} else {
			
			throw new IllegalArgumentException&#40;"value is not a string!"&#41;;
		}		
	}
}
</pre>
		</div>

 :arrow: Suporta AUTOINCREMENT do MySQL, ou seja, automaticamente recupera o ID gerado pelo MySQL e coloca no seu bean quando vc faz um INSERT. Suporta SEQUENCE do Oracle, ou seja, automatimcamente utiliza uma sequence do Oracle para gerar a chave primária do seu bean.

<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>

User u = new User&#40;&#41;; // sem ID, o id será criado pelo banco...

u.setAge&#40;33&#41;;

u.setName&#40;"Pela"&#41;;

session.insert&#40;u&#41;;

System.out.println&#40;"ID do objeto inserido: " + u.getId&#40;&#41;&#41;;

</pre>
		</div>

 :arrow: Se o nome da variável do seu bean for diferente do nome do seu campo na tabela do banco de dados, basta fazer assim:

<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>

public void loadBeans&#40;&#41; {

      bean&#40;hello.User.class, "Users"&#41;
		.pk&#40;"id", "user_id", DBTypes.AUTOINCREMENT&#41;
		.field&#40;"name", DBTypes.STRING, "USER_NAME"&#41;
		.field&#40;"age", DBTypes.INTEGER, "USER_AGE"&#41;
	
}

</pre>
		</div>

Em muito breve:

 :arrow: Suporte a tranções. Até lá vc pode simplesmente pegar a connection da session e fazer a transação com JDBC.

 :arrow: Suporte a carregamento de listas de objetos, ou seja:

<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>

User u = new User&#40;&#41;;

u.setAge&#40;33&#41;;

List users = session.loadList&#40;u&#41;; // retorna uma lista de todos os usuários que possuem 33 anos...

</pre>
		</div>




]]></description>
				<guid isPermaLink="true">http://forum.mentaframework.org/posts/list/1124.page#9283</guid>
				<link>http://forum.mentaframework.org/posts/list/1124.page#9283</link>
				<pubDate><![CDATA[Thu, 12 Apr 2007 14:29:11]]> GMT</pubDate>
				<author><![CDATA[ saoj]]></author>
			</item>
			<item>
				<title>17) MentaBeans = Solução ORM simples do Mentawai para CRUD (persistência) de POJOs no BD</title>
				<description><![CDATA[ Se estou utilizando MentaBean na minha Action, a transação também funciona?

Quero fazer um sistema o mais robusto possível, por isso quero saber se também usa-se transação com Beans, ou isso é só para operações diretamente feitas com a Connection "manualmente" na Action.]]></description>
				<guid isPermaLink="true">http://forum.mentaframework.org/posts/list/1124.page#11922</guid>
				<link>http://forum.mentaframework.org/posts/list/1124.page#11922</link>
				<pubDate><![CDATA[Wed, 29 Aug 2007 13:29:29]]> GMT</pubDate>
				<author><![CDATA[ YkyMatt]]></author>
			</item>
			<item>
				<title>Re:17) MentaBeans = Solução ORM simples do Mentawai para CRUD (persistência) de POJOs no BD</title>
				<description><![CDATA[ 
Funciona sem problemas... Vc pode usar a Transaction do Mentawai ou a transaction da connection (faz na mão a transação)...
]]></description>
				<guid isPermaLink="true">http://forum.mentaframework.org/posts/list/1124.page#11930</guid>
				<link>http://forum.mentaframework.org/posts/list/1124.page#11930</link>
				<pubDate><![CDATA[Wed, 29 Aug 2007 16:11:04]]> GMT</pubDate>
				<author><![CDATA[ saoj]]></author>
			</item>
			<item>
				<title>Re:17) MentaBeans = Solução ORM simples do Mentawai para CRUD (persistência) de POJOs no BD</title>
				<description><![CDATA[ Pessoal,

Gostaria de usar o mentabean configurando os beanConfig dentro do próprio POJO. Como pode ser feito com hibernate annotations.

É possível? Como fazer?]]></description>
				<guid isPermaLink="true">http://forum.mentaframework.org/posts/list/1124.page#17003</guid>
				<link>http://forum.mentaframework.org/posts/list/1124.page#17003</link>
				<pubDate><![CDATA[Sat, 4 Apr 2009 09:38:14]]> GMT</pubDate>
				<author><![CDATA[ Silvio Pereira]]></author>
			</item>
			<item>
				<title>Re:17) MentaBeans = Solução ORM simples do Mentawai para CRUD (persistência) de POJOs no BD</title>
				<description><![CDATA[ 
A implementação padrão do MentaBeans que vem com o Mentawai usa JDBC puro e não hibernate. Logo não tem como fazer isso via Hibernate Annotations.

Nada impede que alguém implementa o MentaBeans com o Hibernate por trás. O MentaBeans é uma especificação (interface) assim como o JPA.]]></description>
				<guid isPermaLink="true">http://forum.mentaframework.org/posts/list/1124.page#17072</guid>
				<link>http://forum.mentaframework.org/posts/list/1124.page#17072</link>
				<pubDate><![CDATA[Thu, 30 Apr 2009 09:11:07]]> GMT</pubDate>
				<author><![CDATA[ saoj]]></author>
			</item>
	</channel>
</rss>
